use*_*972 5 python django view web
对不起,我的英语不好,我会尽力描述我的问题。我正在将Django 1.5与Python 3.2配合使用。我正在使用django.contrib.messages在重定向用户后向用户显示消息。如果我尝试加载重定向到另一个显示消息的页面的页面,则在几次尝试后,它不会删除以前的消息(仅删除上一个页面的消息)。因此,我看到的是2条相同的消息。仅在Google Chrome(和Cromium)中会发生这种情况。切勿在FireFox或Opera中使用。无论邮件是另存为cookie还是会话中。视图函数被调用了两次,但是我不知道为什么Chrome和它有什么关系(???)。
我已经录制了视频:http : //www.youtube.com/watch?v= nXtQ0uj1Hbw&feature= youtu.be。
稍后添加...
好。我已经为此启动了一个新项目(项目“ mysite”中包含一个名为“ test_app”的应用程序):
mysite / urls.py的内容:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^ms', include('test_app.urls', namespace="testapp")),
)
Run Code Online (Sandbox Code Playgroud)
test_app.py的内容
from django.conf.urls import patterns, url
urlpatterns = patterns('test_app.views',
url(r'/go-away/$', 'go_away', name='go-away'),
url(r'/come-here/$', 'come_here', name='come-here'),
)
Run Code Online (Sandbox Code Playgroud)
test_app / views.py的内容
from django.shortcuts import render
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.contrib import messages
import random
def go_away(request):
messages.info(request, 'FORBIDDEN PLACE! Float: %f' % random.random())
return HttpResponseRedirect(reverse('testapp:come-here'))
def come_here(request):
return render(request, 'testapp/template.html', {})
Run Code Online (Sandbox Code Playgroud)
testapp / templates / testapp / template.html的内容
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% else %}
There was no redirection.
{% endif %}
Run Code Online (Sandbox Code Playgroud)
除此之外,我还添加了我的settings.py(位于和):
# Context processors
TEMPLATE_CONTEXT_PROCESSORS = {
'django.contrib.messages.context_processors.messages',
}
Run Code Online (Sandbox Code Playgroud)
配置的数据库(mysite / mysite.db),甚至运行命令“ python3 manage.py syncdb”
什么都没做。您可以轻松地重现该内容。
我的软件:-Python 3.2-Django 1.5-带有从源代码编译的MOD_WSGI的Apache 2.2。-Linux Mint 14下的所有这些。
您最终应该看到的内容:http : //www.youtube.com/watch?v=3L27iwP1PqM&feature=youtu.be 3L27iwP1PqM&feature=youtu.be质量不是最重要的,但是我确实在这里粘贴了代码。
如您所见,浮点数都是不同的,这意味着消息仅在一个请求期间添加,并且不会在其他任何页面上显示。据我所知,这意味着view函数运行了两次,而忽略了第一个重定向。
PS:如果您将消息手动保存到request.session.messages列表中,则会话也是如此。仅在使用Chrome或Chromium时才会出现此类问题。如您所见,Opera完美运行。
| 归档时间: |
|
| 查看次数: |
3241 次 |
| 最近记录: |