我想使用Django的消息框架。Django消息不工作
爲https://docs.djangoproject.com/en/dev/ref/contrib/messages/#enabling-messages
我通過messages.success(self.request, 'Updated.')
添加消息,但是沒有消息顯示告訴我究竟做了。 {% if messages %}
評估始終爲false。
如果我打印{{ messages }}
我得到<django.contrib.messages.storage.fallback.FallbackStorage object at 0x7fb701c47b70>
。
什麼可能是錯的?
我中間件
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
我的模板context處理器
TEMPLATE_CONTEXT_PROCESSORS = [
"django.contrib.auth.context_processors.auth",
"django.template.context_processors.debug",
"django.template.context_processors.i18n",
"django.core.context_processors.request",
"django.template.context_processors.media",
"django.template.context_processors.static",
"django.template.context_processors.tz",
"django.contrib.messages.context_processors.messages"
]
我安裝的應用程序
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
)
編輯
class ItemUpdateView(LoginRequiredMixin, UpdateView):
model = Item
context_object_name = 'item'
form_class = ItemForm
def get_form_kwargs(self):
kwargs = super(ItemUpdateView, self).get_form_kwargs()
kwargs["user"] = self.request.user
return kwargs
def form_valid(self, form):
with transaction.atomic(), reversion.create_revision():
self.object = form.save()
reversion.set_user(self.request.user)
reversion.set_comment("Updating")
messages.success(self.request, "Updated")
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return self.object.get_update_url()
編輯2
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
{% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Important: {% endif %}
{{ message }}
</li>
{% endfor %}
</ul>
{% else %}
no messages
{% endif %}
編輯3
這對我來說是一個很大的謎。
如果我使用
def form_valid(self, form):
self.object = form.save()
messages.success(self.request, "Updated")
return HttpResponseRedirect(self.get_success_url())
它不添加消息,但它如果我使用
def dispatch(self, request, *args, **kwargs):
messages.success(request, 'Updated.')
return super(ItemUpdateView, self).dispatch(request, *args, **kwargs)
你能後,你添加郵件的實際片段? – Selcuk 2015-04-01 13:15:59
我已經更新了我的問題與片段 – Jamgreen 2015-04-01 13:18:43
一切似乎與您的配置好,我會檢查,而不是如果messages.success實際上被調用。另一件可能發生的事情是,您成功後多次重定向,所以消息在兩者之間丟失。 – gseva 2015-04-01 14:21:24