模板如何获取用户对象?
换句话说,在渲染过程中究竟是什么过程将用户对象传递给模板?
还有什么可以在模板中访问?
答案 0 :(得分:6)
使用django.contrib.auth.context_processors.auth
上下文处理器,您可以访问模板中的auth.User
实例。
如果
TEMPLATE_CONTEXT_PROCESSORS
包含此处理器,则每个RequestContext
将包含以下变量:
user
- 表示当前登录用户的auth.User
个实例 (或AnonymousUser实例,如果客户端未登录)。
只需在django.contrib.auth.context_processors.auth
设置中定义TEMPLATE_CONTEXT_PROCESSORS
,然后在模板中使用{{user}}
。
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth", # define this in your settings
....
)
模板上下文处理器:
它是一个用于填充上下文的元组 的RequestContext。这些callables将请求对象作为他们的 参数并返回要合并到的项目字典 上下文。
默认情况下,以下上下文处理器由Django 1.6设置。
("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")
模板中存在哪些变量?
您可以通过TEMPLATE_CONTEXT_PROCESSORS
设置了解所有模板中存在的所有变量。其中定义的每个上下文处理器在上下文中包括一些变量。例如,django.contrib.auth.context_processors.auth
包含user
变量,其中包含user
对象,django.core.context_processors.media
上下文处理器在模板中包含MEDIA_URL
变量。
要使用不同的上下文处理器检查模板中可访问的所有变量,请参阅此Django documentation link.
访问上下文中的request
对象
您可以在TEMPLATE_CONTEXT_PROCESSORS
中将django.core.context_processors.request
添加到settings.py
,然后在您的上下文中访问request
对象。
您还可以{{ request.user }}
访问当前用户。您必须明确添加此设置,因为默认情况下它不存在。
在您的设置中将.request
上下文处理器添加到TEMPLATE_CONTEXT_PROCESSORS
。
TEMPLATE_CONTEXT_PROCESSORS = (
....
`django.core.context_processors.request`,
)
编辑:(感谢@Ozgur)
另外,在MIDDLEWARE_CLASSES
设置user
设置request
设置中添加AUTHENTICATION_MIDDLEWARE
。它已从Django 1.7.
MIDDLEWARE_CLASSES
设置中删除
类AuthenticationMiddleware
将表示当前登录用户的user
属性添加到每个传入的HttpRequest
对象。
MIDDLEWARE_CLASSES = (
...
# explicitly add the 'AuthenticationMiddleware' class
'django.contrib.auth.middleware.AuthenticationMiddleware',
)