7

if every web page has a user new message notice(new message count, like message(1)), how can i pass variable '{ new_message_count: 1}' to every view i want to using middleware:

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

and template look like:

<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 回答