我的 html 模板如何在没有 view.py 传递的任何参数的情况下获取用户名?
Posted
技术标签:
【中文标题】我的 html 模板如何在没有 view.py 传递的任何参数的情况下获取用户名?【英文标题】:How are my html templates able to get the username without any arguments passed by views.py? 【发布时间】:2019-11-02 20:52:05 【问题描述】:我有一个基于 djongo 引擎的谷歌身份验证应用程序
我的 views.py 渲染主页,没有传递任何参数:
return render(request=request,template_name="mainapp/homepage.html")
homepage.html 看起来像:
<html>
<head></head>
<body bgcolor = "green">
<p>THIS IS THE HOMEPAGE</p>
% if user.is_authenticated %
<p class="display-4">Hello, user.username you are signed in</p>
<a href="/account/logout">Log out</a>
% else %
<a href=% url "social:begin" "google-oauth2" %>Login with Google</a>
<p>Not signed in</p>
% endif %
</body>
</html>
但在用户登录后,它会显示正确的用户名(不是管理员的用户名)。
【问题讨论】:
【参考方案1】:这是因为您的设置中的django.contrib.auth.context_processors.auth
上下文处理器:
'OPTIONS':
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
],
它在模板中附加当前登录的用户。根据文档:
如果启用此处理器,每个 RequestContext 将包含这些 变量:
user – 一个 auth.User 实例,代表当前登录的用户(或 AnonymousUser 实例,如果客户端未登录)。 perms – django.contrib.auth.context_processors.PermWrapper 的一个实例,代表 当前登录用户拥有的权限。
您也可以查看source
。
【讨论】:
【参考方案2】: 如果您想在视图中显示额外的内容,请将这些值传递到context
。
return render(request=request,template_name="mainapp/homepage.html", context = user: request.user)
但是如果用户没有登录,你在访问user.username
时会得到一个空字符串。因为AnonymousUser object 的用户名总是返回空字符串。
您可以从这个问题中了解更多信息,例如将额外的值传递给您的模板 --> How to render a variable in a django template?
但是,如果您想通过在context
中不传递任何内容来执行此操作,只需将以下解决方案添加到您的模板中。
request.user.username
您可以像这样访问request object
中的任何内容。有关更多信息,请查看此问题 --> What does request.user refer to in Django?
【讨论】:
是的,但是模板如何在没有views.py 将任何用户参数传递给模板的情况下访问用户名 @VrukshaNikam 试试这个, request.user.username
不通过context
。以上是关于我的 html 模板如何在没有 view.py 传递的任何参数的情况下获取用户名?的主要内容,如果未能解决你的问题,请参考以下文章