3

最近 Django 1.3 にアップグレードしましたが、メッセージ システムの使用を開始したいと考えています。

ミドルウェア、テンプレート コンテキスト プロセッサ、およびメッセージを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 %}

for ステートメントも削除しましたが、まだ次のエラーが表示されます。

<module 'django.contrib.messages' from '/Users/ApPeL/.virtualenvs/mysite.com/lib/python2.7/site-packages/django/contrib/messages/__init__.py'>

何か案は?

4

2 に答える 2

2

この問題が発生しました。コンテキスト プロセッサに以下を含めました。

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

messagesによって正しい方法で設定されるため、コンテキストで設定していないことを確認してくださいdjango.contrib.messages.context_processors.messages

于 2012-03-12T12:25:28.493 に答える
-1

settings.pyのMIDDLEWWARE_CLASSESと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を忘れましたか?):

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
 {% endif %}

お役に立てば幸いです。

于 2011-09-27T12:40:39.840 に答える