2011-09-27 64 views
3

我最近升级到了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'> 

任何想法?

+1

显示您的看法。 – DrTyrsa

+0

上次发生这种事的时候,我认为是有问题的。所以引用DrTyrsa,展现你的观点。 –

+0

你是否得到了这个问题的解决方案也坚持这个问题 – 2015-01-20 12:04:02

回答

-1

你怎么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 %} 

我希望它能帮助你。

+0

复制并粘贴我的配置,也尝试过移动一些项目,仍然没有运气 – ApPeL

+0

您是否在模板视图中使用{%if messages%}? – Sebastien

2

我刚刚遇到这个问题。我已经包含在我的背景处理器如下:

from django.contrib import messages 
... 
def allrequests(request): 
    ctx = { 
     ... 
     'messages': messages 
    } 
    return ctx 

确保你是不是在上下文设置messages,因为它是在以正确的方式通过django.contrib.messages.context_processors.messages设置。