如果我在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)

Django相关问答推荐

在保存新实例之前删除一个实例(Django模型保存方法)

测试DRF中需要授权头

当使用django-tinymce时,我在哪里指定referer?

如何删除Docker上的django应用程序?

如何保护单个数据库行/模型实例?

在 Django 中重组多对多字段

Django - 是否可以为查询集预取单个字段的多个过滤器?

如果上下文中缺少变量,如何使 Django 模板引发错误

如何缓存 Django Rest Framework API 调用?

如何在 django 模板中将名称反转为绝对 url?

Django: Admin:在管理员中更改字段的小部件

Ruby on Rails 会影响网页的外观吗?

用户组和权限

将 XML 从 URL 解析为 python 对象

PyMongo vs MongoEngine for Django

django.core.exceptions.ImproperlyConfigured:请求设置 USE_I18N,但未配置设置

如何动态检索 Django 模型类?

如何使用查询参数构造 Django 反向/url?

在 Django REST 框架序列化程序中动态排除或包含字段

Django模板过滤器(filters)、标签(tags)、simple_tags和inclusion_tags