Django消息框架在模板循环中不起作用
问题描述:
我最近升级到了Django 1.3,我想开始使用Messages系统。Django消息框架在模板循环中不起作用
我已经加入我的中间件,模板背景处理器和消息也进入INSTALLED_APPS
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'facebook.djangofb.FacebookMiddleware',
'annoying.middlewares.RedirectMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.request",
"django.contrib.messages.context_processors.messages",
)
INSTALLED_APPS = (
'django.contrib.messages',
)
我只是简单地基于一个观点,即做一个简单的计算测试。
在管理员中,消息显示出来,但是当试图在我的base.html文件中呈现它们时,出现以下错误。
Caught TypeError while rendering: 'module' object is not iterable
并在堆栈中失败。
{% for message in messages %}
我也删除了语句和我仍然得到了下面的错误,仅此而已
<module 'django.contrib.messages' from '/Users/ApPeL/.virtualenvs/mysite.com/lib/python2.7/site-packages/django/contrib/messages/__init__.py'>
任何想法?
答
你怎么MIDDLEWWARE_CLASSES和settings.py TEMPLATE_CONTEXT_PROCESSORS,它必须看起来像:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.i18n",
"django.core.context_processors.request",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages"
)
而且在INSTALLED_APPS:
'django.contrib.messages'
且模板中(你忘了,如果?) :
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
我希望它能帮助你。
答
我刚刚遇到这个问题。我已经包含在我的背景处理器如下:
from django.contrib import messages
...
def allrequests(request):
ctx = {
...
'messages': messages
}
return ctx
确保你是不是在上下文设置messages
,因为它是在以正确的方式通过django.contrib.messages.context_processors.messages
设置。
显示您的看法。 – DrTyrsa
上次发生这种事的时候,我认为是有问题的。所以引用DrTyrsa,展现你的观点。 –
你是否得到了这个问题的解决方案也坚持这个问题 – 2015-01-20 12:04:02