21

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

4

4 回答 4

20

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

{% my_template_tag user %}

然后确保你的模板标签接受这个额外的参数。查看有关此主题的文档。您还应该检查简单的标签

于 2013-02-11T15:35:18.957 回答
17

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

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

您不必指定“请求”来访问其内容

更新:

请注意:is_authenticated()始终True为登录用户(User对象)返回,但FalseAnonymousUser(访客用户)返回。在这里阅读:https ://docs.djangoproject.com/en/1.7/ref/contrib/auth/

于 2013-02-11T15:15:02.023 回答
6

这个问题已经在这里回答了

{% if user.is_authenticated %}
    <p> Welcome '{{ user.username }}'</p>
{% 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()在视图和user.get_username模板中使用。优先于直接引用用户名属性。 来源
  • 如果使用 RequestContext,则此模板上下文变量可用。
  • django.contrib.auth.context_processors.auth 默认启用并包含变量 user
  • 您不需要启用 django.core.context_processors.request 模板上下文处理器。

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

于 2017-11-30T23:01:29.840 回答
-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和合适的模型

于 2020-05-04T20:25:22.660 回答