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

时间:2010-07-11 02:13:53

标签: django django-templates

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

dict={'messagenumber':5}
return render_to_response('template.html',dict,context_instance=RequestContext(request))

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

由于

3 个答案:

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