我有一个公共数据{已登录用户的消息号),以显示在每个页面上。我可以简单地传递给模板
dict={'messagenumber':5}
return render_to_response('template.html',dict,context_instance=RequestContext(request))
但是,如果我将此dict数据传递到非常页面,这看起来很乏味。是否有更简单的方法将公共数据传递到每个页面?
由于
答案 0 :(得分:17)
这让我感到非常普遍。你想用context processors我的朋友!
非常容易创建,如下:
def messagenumber_processor(request):
return {'messagenumber': 5}
由于messagenumber是基于User的动态变量,因此您可以从request.user
获取数据,因为您可以在每个上下文处理器中拥有对request
的完全访问权限。
然后,将它添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS
并且你已全部设置:-)你可以在上下文处理器中执行任何形式的数据库操作或其他逻辑,试一试!< / p>
答案 1 :(得分:17)
只是为了节省某人的时间,如果django的新手
settings.py
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
"home.context_processor.remote_ip")
在家庭应用程序中,创建一个名为context_processor.py 的python文件
在context_processor.py中添加如下函数:
def remote_ip(request):
return {'remote_ip': request.META['REMOTE_ADDR']}
在{{remote_ip}}
等模板中使用它答案 2 :(得分:0)
编写自己的函数来处理它。
def render_with_message_number(template, message_number, request):
return render_to_response(template, dict(messagenumber=message_number),
context_instance=RequestContext(request))
不要影dict
。