如果我在Django中设置一个会话变量,比如:
request.session["name"] = "name"
是否有一种方法可以从模板中访问它,或者必须从视图中检索它,然后将其传递给模板?
询问,因为我想在一个模板中访问大约10个小会话变量,将所有10个变量从视图传递到模板可能会有点混乱.
(我必须使用会话变量,因为它是HttpResponseRedirect,但将变量存储在数据库中对我来说太过分了.)
那么,有没有办法直接在模板中获取会话变量呢?
如果我在Django中设置一个会话变量,比如:
request.session["name"] = "name"
是否有一种方法可以从模板中访问它,或者必须从视图中检索它,然后将其传递给模板?
询问,因为我想在一个模板中访问大约10个小会话变量,将所有10个变量从视图传递到模板可能会有点混乱.
(我必须使用会话变量,因为它是HttpResponseRedirect,但将变量存储在数据库中对我来说太过分了.)
那么,有没有办法直接在模板中获取会话变量呢?
你需要在template context processors的基础上加django.template.context_processors.request
.然后,您可以像这样访问它们:
{{ request.session.name }}
如果您使用的是自定义视图,请确保传递的是RequestContext实例.取自documentation的示例:
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))
Update 2013:从我仍然收到的对这个答案的投票来看,人们仍然觉得它很有用,这比它最初编写的时间晚了三年多.但是请注意,尽管上面的视图代码仍然有效,但现在有一种更简单的方法来实现这一点.render()
是一个与render_to_response()
非常相似的函数,但它自动使用RequestContext
,无需显式传递:
from django.shortcuts import render
def some_view(request):
# ...
return render(request, 'my_template.html', my_data_dictionary)