我的 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 传递的任何参数的情况下获取用户名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django view.py 中调用远程 api?

Django模板未加载

如何将查询url参数传递给twig模板

模板继承中的变量从何而来?

如何将 JSON 对象传递给 Flask 中的模板?

Django:如何遍历 html 中的嵌套 Json 对象