一尘不染

Django:从模板中访问会话变量?

django

如果我在Django中设置会话变量,例如:

request.session["name"] = "name"

有什么方法可以从模板中访问它,还是必须从视图中检索它,然后将其传递给模板?

询问是因为我想在模板中访问大约10个小会话变量,然后将所有10个从视图传递到模板可能会有些混乱。

(我必须使用会话变量,因为它是HttpResponseRedirect,但是出于我的目的,将变量存储在数据库中是过大的。)

那么-有什么方法可以直接在模板中获取会话变量?


阅读 349

收藏
2020-03-29

共1个答案

一尘不染

你需要添加django.core.context_processors.request到模板上下文处理器。然后,你可以像这样访问它们:

{{ request.session.name }}

如果你使用的是自定义视图,请确保你传递了RequestContext实例。来自文档的示例:

from django.shortcuts import render_to_response
from django.template import RequestContext

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

从我仍然收到此答案的支持来看,人们对它的帮助仍然存在,距最初编写已经三年多了。但是请注意,尽管上面的视图代码仍然有效,但是如今有一种更简单的方法可以执行此操作。render()是与极为相似的功能render_to_response(),但它会RequestContext自动使用,而无需显式传递它:

from django.shortcuts import render

def some_view(request):
    # ...
    return render(request, 'my_template.html', my_data_dictionary)
2020-03-29