對不起我的英文不好,我會盡我所能描述我的問題。 我在Python 3.2中使用Django 1.5。我使用django.contrib.messages在重定向它們之後向用戶顯示消息。如果我嘗試加載重定向到顯示消息的另一個頁面的頁面,則在嘗試多次後,它不會刪除以前的消息(僅限最後一頁)。所以,我看到的是2個相同的消息。這隻發生在Google Chrome(和Cromium)中。從來沒有在FireFox或Opera。無論消息是保存爲cookie還是保存在會話中。 視圖函數被調用兩次,但我不知道爲什麼和Chrome特別與它做了什麼(???)。我已錄製視頻:http://www.youtube.com/watch?v=nXtQ0uj1Hbw&feature=youtu.be。django視圖被調用兩次
稍後添加...
好的。我已經開始了一個新的項目只是爲了這個(項目 「mysite的」 包含一個應用裏面稱爲 「test_app」):mysite的/ urls.py的
內容:
test_app.py的from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^ms', include('test_app.urls', namespace="testapp")),
)
內容test_app的
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'),
)
內容/ views.py
testapp /模板/種皮的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', {})
內容PP/template.html
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% else %}
There was no redirection.
{% endif %}
從所有這些
開,我添加到我的settings.py(在和):
# Context processors
TEMPLATE_CONTEXT_PROCESSORS = {
'django.contrib.messages.context_processors.messages',
}
配置數據庫(mysite的/ mysite.db),甚至跑命令「python3 manage.py syncdb」
沒有其他的事情。您可以輕鬆再現。
我的軟件: - Python的3.2 - Django的1.5 - 阿帕奇2.2 mod_wsgi的從源代碼編譯。 - 所有這一切都在Linux Mint的14
你應該看看到底是什麼: http://www.youtube.com/watch?v=3L27iwP1PqM&feature=youtu.be 質量是不是gratest,但我在這裏粘貼代碼。
正如您所看到的,浮點數全部不同,這意味着消息只在一個請求期間添加,並且不會在任何其他頁面上顯示。這就意味着,我可以理解,視圖函數運行了兩次,忽略了第一次重定向。
P.S .:如果您將消息手動保存到request.session.messages列表中,則與會話相同。 只有當我使用Chrome或Chromium時,纔有這樣的問題。正如你所看到的,歌劇是完美的。
沒有代碼我們怎麼能告訴你哪裏是問題? – Rohan
郵政編碼的網址,意見和你從哪裏重定向。 –
請發佈你的代碼,你的英語很棒。 –