django视图调用了两次

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完美运行。

小智 0

女贞!尝试在未内置的 django 网络服务器上运行应用程序。我不知道,但也许,您经常刷新页面,并且网络服务器没有时间完成之前的响应。