django中间件设置用户特殊的全局变量

时间:2010-11-14 15:13:42

标签: django templates variables response middleware

如果每个网页都有用户新消息通知(新消息计数,如消息(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>

2 个答案:

答案 0 :(得分:5)

已经有一个内置的messaging framework可以为你处理所有这些。

但是,假设您真的想要自己动手,那么就无法从中间件传递到上下文中。您可以将其附加到request对象,然后您可以在视图或模板中使用该对象,或者添加一个上下文处理器,该处理器从请求中获取变量并将其添加到上下文中。

答案 1 :(得分: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' ]