如何在不在所有视图中实际指定上下文的情况下将上下文传递给模板?

时间:2011-03-12 23:33:11

标签: django templates view django-context

我有一些观点,它们都运行良好,并且都使用扩展一个基本模板的模板,输出核心HTML,页眉,页脚,导航等。幸福的家庭。

现在,我想在页面上玩会话,因为你无法从模板中访问用户的会话信息而没有实际从视图中传递它(纠正我错在哪里)我有两个选择:

  1. 将会话数据添加到我作为上下文传递给视图中的HTML模板的其余位(不确定这是否是一个好方法)

  2. 以某种方式从视图中继承所有现有视图,这些视图将始终将上下文推送到正在处理的模板 - 这样我就不必担心将来可能要添加到我的页面的任何其他内容 - 是这可能吗?

  3. 我对django很新,可能还有其他正确的做法 - 所有建议都非常感谢。

1 个答案:

答案 0 :(得分:7)

我认为在上下文处理器中添加是一种非常简单的方法。

你可以自己编写也可以使用这个: DJANGO.CORE.CONTEXT_PROCESSORS.REQUEST

http://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-request

然后,您将在模板中获得请求,并可以使用request.session

进入会话

如果你这样做,请确保将视图中的RequestContext传递给模板,如下所示:

from django.template import RequestContext
def some_view(request):
    # ...
    return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))

同时修改settings.py以在上下文处理器中添加

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    "django.core.context_processors.request",
)