如果我在Django中设置会话变量,例如:
request.session["name"] = "name"
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在模板中访问它,或者我是否必须从视图中检索它,然后将其传递给模板?
问,因为我有大约10个小会话变量,我想在模板中访问,并将所有10个从视图传递到模板可能会有点乱.
(我必须使用会话变量,因为它是一个HttpResponseRedirect,但是为了我的目的,将变量存储在数据库中是过度的.)
那么 - 任何直接在模板中获取会话变量的方法?
Lud*_*mer 214
您需要添加django.core.context_processors.request到模板上下文处理器.然后您可以像这样访问它们:
{{ request.session.name }}
Run Code Online (Sandbox Code Playgroud)
如果您使用自定义视图,请确保传递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))
Run Code Online (Sandbox Code Playgroud)
更新2013:从我仍然收到的这个答案的评价来看,人们仍然觉得它有用,在它最初编写三年多之后.但请注意,尽管上面的视图代码仍然有效,但现在有一种更简单的方法可以做到这一点.render()是一个非常类似的函数render_to_response(),但它RequestContext自动使用,无需显式传递:
from django.shortcuts import render
def some_view(request):
# ...
return render(request, 'my_template.html', my_data_dictionary)
Run Code Online (Sandbox Code Playgroud)
Dan*_*man 17
request.session 是一个像任何其他字典,所以你只需使用正常的模板机制的属性和成员:
{{ request.session.name }}
Run Code Online (Sandbox Code Playgroud)
不要忘记将请求传递到模板上下文中,或者甚至更好地确保使用RequestContext并启用请求上下文处理器.请参阅文档.
小智 11
我正在使用Django 1.9(2016年3月)并开始{{ request.session.name}}工作,我的设置有这个::
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
与以前的答案的区别是:'django.core.context_processors.request'成为'django.template.context_processors.request'
| 归档时间: |
|
| 查看次数: |
79241 次 |
| 最近记录: |