django中的模板如何获取用户对象?

时间:2015-08-08 16:27:18

标签: django django-templates django-views

模板如何获取用户对象?

换句话说,在渲染过程中究竟是什么过程将用户对象传递给模板?

还有什么可以在模板中访问?

1 个答案:

答案 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',
)