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