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

Django:从模板中访问会话变量?,django,Django,如果我在Django中设置会话变量,如: request.session["name"] = "name" 是否有一种方法可以从模板中访问它,或者必须从视图中检索它,然后将其传递给模板 询问,因为我想在模板中访问大约10个小会话变量,而将所有10个变量从视图传递到模板可能会有点混乱 (我必须使用会话变量,因为它是HttpResponseRedirect,但将变量存储在数据库中对我来说太过分了。) 那么-有没有办法直接在模板中获取会话变量?请求。会话与其他任何会话一样是一个字典,因此您只需使用常

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

request.session["name"] = "name"
是否有一种方法可以从模板中访问它,或者必须从视图中检索它,然后将其传递给模板

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

(我必须使用会话变量,因为它是HttpResponseRedirect,但将变量存储在数据库中对我来说太过分了。)


那么-有没有办法直接在模板中获取会话变量?

请求。会话与其他任何会话一样是一个字典,因此您只需使用常规的属性和成员模板机制即可:

{{ request.session.name }}

不要忘记将请求传递到模板上下文中,或者更好地确保您正在使用RequestContext并启用了请求上下文处理器。请参阅。

您可以将
请求
变量传递到模板,然后使用:

{{ request.session.name }}
您需要添加到您的。然后您可以像这样访问它们:

{{ request.session.name }}
如果您正在使用自定义视图,请确保您正在传递RequestContext实例。示例取自:

2013年更新:从我仍然收到的关于这个答案的投票来看,人们仍然觉得它很有帮助,这比它最初编写的时间晚了三年多。但是请注意,尽管上面的视图代码仍然有效,但现在有一种更简单的方法来实现这一点。是一个非常类似于
render_to_response()
的函数,但它自动使用
RequestContext
,无需显式传递:

from django.shortcuts import render

def some_view(request):
    # ...
    return render(request, 'my_template.html', my_data_dictionary)
在你的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))

首先打印
request.session.keys()

request.session['_auth_user_id']
request.session['_auth_user_backend']

您将获得这两个会话变量。

继续@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")
参考文献


请注意,您应该在设置中使用完整的代码。单独使用“django.core.context\u processors.request”
将导致覆盖默认设置。

现在可能有点太晚了。如果直接在
settings.py
中设置
TEMPLATE\u CONTEXT\u处理器
,则会丢失所有默认的
TEMPLATE\u CONTEXT\u处理器
值。以下是我在我的
设置.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',
)
我正在使用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',
            ],
        },
    },
]

与前面的答案不同的是:
'django.core.context\u processors.request'
变成了
'django.template.context\u processors.request'
最简单的实现是使用if循环:

{% if 'data' in request.session %}

有关如何在不覆盖默认值的情况下将django.core.context_processors.request添加到模板上下文处理器的信息,请参阅。如果我使用HttpResponse而不是render,我仍然能够在模板中获取会话属性。我很困惑,请告诉我me@cafebabe1991什么意思?
HttpResponse
类根本不处理模板,所以这个问题似乎不相关……是的,实际上我做了一个实验,最后才意识到这一点。这个问题不好。Sorry还必须将'django.contrib.auth.context\u processors.auth'添加到TEMPLATE\u context\u processors元组中。在django 1.10中,
django.TEMPLATE.context\u processors.request
已在设置文件中:D
{% if 'data' in request.session %}