如何在模板标签中获取当前用户?

时间:2013-02-11 15:09:55

标签: django django-templates

如何在django模板标签中获取当前用户? (请求对象不可访问) 或者我如何访问请求对象?

4 个答案:

答案 0 :(得分:15)

如果要访问模板标记中的当前用户,必须将其作为模板中的参数传递,如下所示:

{% my_template_tag user %}

然后确保您的模板标记接受此额外参数。查看有关此主题的documentation。您还应该查看simple tags

答案 1 :(得分:11)

用户始终附加到请求,您可以在模板中执行以下操作:

{% if user.is_authenticated %}
{% endif %}

您无需指定“请求”来访问其内容

<强>更新

请注意:is_authenticated()始终为已记录的用户(True对象)返回User,但为False(访客用户)返回AnonymousUser。请在此处阅读:https://docs.djangoproject.com/en/1.7/ref/contrib/auth/

答案 2 :(得分:2)

这个问题已经answered here

{% ifuser.is_authenticated %}
    Welcome 
'{{ user.username }}'
    {% else %}
    <a href="{% url django.contrib.auth.login %}">Login</a>
{% endif %}

并确保在settings.py中安装了请求模板上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.request',
...
)

注意:

  • 在视图中使用request.user.get_username()&amp; user.get_username in 模板。首选直接引用用户名属性。 Source
  • 如果使用RequestContext,则此模板上下文变量可用。
  • django.contrib.auth.context_processors.auth默认启用&amp;包含变量user
  • 您无需启用django.core.context_processors.request模板上下文处理器。

来源:https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

答案 3 :(得分:-1)

假设您有每个注册用户的个人资料页面,并且只想显示个人资料页面所有者的编辑链接(即,如果当前用户正在访问他/她的个人资料页面,则用户可以看到编辑按钮,但用户看不到其他用户的个人资料页面上的编辑按钮。 在您的 html 文件中:

<h2>Profile of {{ object.username }}</h2>
{% if object.username == user.username %}
    <a href="{% url 'profile_update' object.pk %}">Edit</a>
{% endif %}

然后您的 urls.py 文件应包含:

from django.urls import path
from .views import ProfileUpdateView
urlpatterns = [
    ...
    path('<int:pk>/profile/update', ProfileUpdateView.as_view(), name = 'profile_update'),
    ...
]

考虑到您拥有合适的ProfileUpdateView和合适的型号