如何将常用字典数据传递到django中的每个页面

icn*_*icn 18 django django-templates

我有一个公共数据{登录用户的消息号),以显示在每个页面上.我可以简单地传递给模板

dict={'messagenumber':5}
return render_to_response('template.html',dict,context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

但是如果我将这个dict数据传递到非常页面,那看起来很乏味.有没有更简单的方法将公共数据传递到每个页面?

谢谢

Bar*_*tek 17

它让我感到非常普遍.你想用我的朋友上下文处理器!

很容易创建,如下所示:

def messagenumber_processor(request):
   return {'messagenumber': 5}
Run Code Online (Sandbox Code Playgroud)

由于messagenumber是基于User的动态变量,因此您可以通过从每个上下文处理器中request.user拥有完全访问权限来获取数据request.

然后,将它添加到您TEMPLATE_CONTEXT_PROCESSORS的settings.py内,并且您已全部设置:-)您可以在上下文处理器中执行任何形式的数据库操作或其他逻辑,试一试!

  • 两个注意事项:1)您需要在MIDDLEWARE_CLASSES设置中拥有django.contrib.auth.middleware.AuthenticationMiddleware,以便request.user能够正常工作。2)仅将django.template.RequestContext实例作为上下文呈现的模板将应用上下文处理器。 (2认同)

Jam*_*Lin 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")
Run Code Online (Sandbox Code Playgroud)

在home应用程序中,创建一个名为context_processor.py的python文件

在context_processor.py中添加如下函数:

def remote_ip(request):
  return {'remote_ip': request.META['REMOTE_ADDR']}
Run Code Online (Sandbox Code Playgroud)

在{{remote_ip}}等模板中使用它