7


3

ジャンゴミドルウェアセットユーザー特別なグローバル変数

すべてのWebページに新しいメッセージ通知(message(1)などの新しいメッセージ数)がある場合、ミドルウェアを使用するすべてのビューに変数 '\ {new_message_count:1}'を渡すにはどうすればよいですか。

class page_variable():
def process_request(self, request):
    # put the variable to the request or response so can used in template variable
    return None

テンプレートは次のようになります。

new ({{ new_message_count }})

2 Answer


5


このすべてを処理する組み込みのhttp://docs.djangoproject.com/en/1.2/ref/contrib/messages/ [メッセージングフレームワーク]が既にあります。

ただし、本当に自分でロールバックしたい場合、ミドルウェアからコンテキストに物事を渡すことはできません。 これを `request`オブジェクトにアタッチすることができます。これをビューやテンプレートで使用するか、リクエストから変数を取得してコンテキストに追加するコンテキストプロセッサーを追加します。


3


djangoの開発バージョンでは、レンダリングする前にミドルウェアからテンプレートコンテキストを編集できます。

class MessageCountMiddleware:
    def process_template_response(self, request, response):
        response.context['new_message_count'] = message_count(request.user)

Django 1.2では、カスタムコンテキストプロセッサを作成できます。

def add_message_count(request):
    return { 'new_message_count': message_count(request.user) }

それを設定に登録します

TEMPLATE_CONTEXT_PROCESSORS += [ 'my_project.content_processors.add_message_count' ]