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設置。