如果我在django中设置一个session变量,比如:
request.session["name"] = "name"
有没有一种方法可以从模板中访问它,或者必须从视图中检索它,然后将它传递给模板?问这个问题是因为我想在一个模板中访问大约10个小会话变量,而将视图中的10个变量全部传递给模板可能会有点混乱。(我必须使用会话变量,因为它是httpresponseredirect,但将变量存储在数据库中对我来说太过了。)那么-有没有办法直接在模板中获取会话变量?
lh80um4z1#
request.session 是一个与其他字典类似的字典,因此您只需对属性和成员使用普通模板机制:
request.session
{{ request.session.name }}
不要忘记将请求传递到模板上下文中,或者更好地确保您使用的是requestcontext并启用了请求上下文处理器。请参阅文档。
z3yyvxxp2#
你需要加上 django.core.context_processors.request 到模板上下文处理器。然后您可以这样访问它们:
django.core.context_processors.request
如果您使用的是自定义视图,请确保您传递的是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))
2013年更新:从我对这个答案的投票结果来看,人们仍然觉得它很有帮助,比它最初写出来的时间晚了三年多。但是请注意,尽管上面的视图代码仍然有效,但是现在有一种更简单的方法来实现这一点。 render() 函数与 render_to_response() ,但它使用 RequestContext 自动执行,无需显式传递:
render()
render_to_response()
RequestContext
from django.shortcuts import render def some_view(request): # ... return render(request, 'my_template.html', my_data_dictionary)
a7qyws3x3#
你可以通过考试 request 变量并使用:
request
enxuqcxy4#
最简单的实现是使用if循环:
{% if 'data' in request.session %}
n3schb8v5#
我正在使用django 1.9(2016年3月)并 {{ request.session.name}} 为了工作,我的设置如下:
{{ 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', ], }, }, ]
与前面的答案不同的是: 'django.core.context_processors.request' 成为 'django.template.context_processors.request'
'django.core.context_processors.request'
'django.template.context_processors.request'
brccelvz6#
继续@ludwik trammer答案,如何添加模板\u上下文\u处理器对于django 1.6,在settings.py中添加模板\上下文\处理器,引用下面的代码,然后使用 {{ request.session.name }} 在模板文件中。
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.core.context_processors.tz", "django.contrib.messages.context_processors.messages", "django.core.context_processors.request")
参考https://docs.djangoproject.com/en/1.6/ref/settings/#std:设置-模板\u上下文\u处理器请注意,您应该在设置中使用完整的代码。使用 "django.core.context_processors.request" 单独将导致覆盖默认设置。
"django.core.context_processors.request"
vq8itlhq7#
现在可能有点晚了。如果你直接设置 TEMPLATE_CONTEXT_PROCESSORS 在 settings.py ,将丢失所有默认值 TEMPLATE_CONTEXT_PROCESSORS 价值观。以下是我在工作中所做的 settings.py :
TEMPLATE_CONTEXT_PROCESSORS
settings.py
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as DEFAULT_TEMPLATE_CONTEXT_PROCESSORS TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_TEMPLATE_CONTEXT_PROCESSORS + ( 'django.core.context_processors.request', )
34gzjxbg8#
第一次打印 request.session.keys() 然后
request.session.keys()
request.session['_auth_user_id'] request.session['_auth_user_backend']
您将得到这两个会话变量。
uubf1zoe9#
在你的settins.py里
TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.request', )
你的观点,可能是这样的。
from django.shortcuts import render_to_response, render from django.http import HttpResponse, HttpResponseRedirect from django.template import RequestContext @login_required() def index_admin(request): return render_to_response('carteras/index_admin.html', {}, context_instance=RequestContext(request))
9条答案
按热度按时间lh80um4z1#
request.session
是一个与其他字典类似的字典,因此您只需对属性和成员使用普通模板机制:不要忘记将请求传递到模板上下文中,或者更好地确保您使用的是requestcontext并启用了请求上下文处理器。请参阅文档。
z3yyvxxp2#
你需要加上
django.core.context_processors.request
到模板上下文处理器。然后您可以这样访问它们:如果您使用的是自定义视图,请确保您传递的是requestcontext示例。文件中的示例:
2013年更新:从我对这个答案的投票结果来看,人们仍然觉得它很有帮助,比它最初写出来的时间晚了三年多。但是请注意,尽管上面的视图代码仍然有效,但是现在有一种更简单的方法来实现这一点。
render()
函数与render_to_response()
,但它使用RequestContext
自动执行,无需显式传递:a7qyws3x3#
你可以通过考试
request
变量并使用:enxuqcxy4#
最简单的实现是使用if循环:
n3schb8v5#
我正在使用django 1.9(2016年3月)并
{{ request.session.name}}
为了工作,我的设置如下:与前面的答案不同的是:
'django.core.context_processors.request'
成为'django.template.context_processors.request'
brccelvz6#
继续@ludwik trammer答案,如何添加模板\u上下文\u处理器
对于django 1.6,在settings.py中添加模板\上下文\处理器,引用下面的代码,然后使用
{{ request.session.name }}
在模板文件中。参考https://docs.djangoproject.com/en/1.6/ref/settings/#std:设置-模板\u上下文\u处理器
请注意,您应该在设置中使用完整的代码。使用
"django.core.context_processors.request"
单独将导致覆盖默认设置。vq8itlhq7#
现在可能有点晚了。如果你直接设置
TEMPLATE_CONTEXT_PROCESSORS
在settings.py
,将丢失所有默认值TEMPLATE_CONTEXT_PROCESSORS
价值观。以下是我在工作中所做的settings.py
:34gzjxbg8#
第一次打印
request.session.keys()
然后您将得到这两个会话变量。
uubf1zoe9#
在你的settins.py里
你的观点,可能是这样的。