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

Posted

技术标签:

【中文标题】如何在模板标签中获取当前用户?【英文标题】:How get current user in a template tag? 【发布时间】:2013-01-26 17:15:20 【问题描述】:

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

【问题讨论】:

您可以将其创建为上下文处理器,而不是创建模板标签并始终在模板中调用它。在上下文处理器中,您无需始终在模板中调用函数即可获取用户。 单行模板标签真的很复杂.. django 真的这么笨拙吗? 或者试着把这个放到你的模板user.username 那你想展示什么?如果它没有用,那么你的问题是不完整的。如果您真的想要帮助,请更具体并提供示例。 问题很清楚,他想在一个模板标签中访问当前用户 【参考方案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 和合适的型号

【讨论】:

【参考方案2】:

这个问题已经answered here:

% 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 模板。优先于直接引用用户名属性。 Source 如果使用 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

【讨论】:

【参考方案3】:

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

% if user.is_authenticated %
% endif %

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

更新:

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

【讨论】:

user.is_authenticated 总是返回 true 所以它基本上没用。 不!它总是为用户(记录的)返回真,但为匿名用户返回假,所以不是没用的!仔细阅读这里:docs.djangoproject.com/en/1.7/ref/contrib/auth【参考方案4】:

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

% my_template_tag user %

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

【讨论】:

以上是关于如何在模板标签中获取当前用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Cloudformation 模板文件中获取用户名?

Django在模板中获取当前视图

如何在 Django 模板中显示当前年份?

如何在 Django 模板中获取当前 URL?

如何在 Django 模板中获取当前 URL?

如何在 Django 模板中获取当前 URL?