7

すべての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

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

<a href="/message/">new <em>({{ new_message_count }})</em></a>
4

2 に答える 2

5

これらすべてを処理する組み込みのメッセージング フレームワークが既に用意されています。

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

于 2010-11-14T16:30:15.727 に答える
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' ]
于 2011-02-17T14:25:46.893 に答える