如何解决获取登录用户,同时在 Django 中使用 UpdateView 更新模型用户
Django 新手在这里构建我的第一个项目。 我正在使用 Django 身份验证,当用户登录时,我在模板面板中显示登录用户使用
<li>
<a style="color: wheat;" href="#"><i class="fi-torso"></i>{{user.full_name}}</a>
<ul class="menu vertical" style="background-color:rgb(51,51,51); border-color: wheat;">
<li><a href="{% url 'users_app:user-logout' %}">Cerrar Sesión</a></li>
</ul>
</li>
问题是登录的用户可以通过 UpdateView 修改其他用户的属性。因此,当我选择要更新的用户(上下文用户现在是将要更新的用户)并访问修改用户模板时,在我的面板中,我看到的是正在修改的用户,而不是看到已登录的用户。
我该如何区分?我明白为什么会发生这种情况,但还没有找到解决方法
解决方法
变量user
通过Built-in template context processors之一即django.contrib.auth.context_processors.auth
添加到上下文中。还有一个上下文处理器 django.template.context_processors.request
将变量 request
添加到上下文中。
问题是您的 UpdateView
还将变量 user
添加到上下文中,因此这是使用的变量。如何解决这个问题?最简单的方法是始终使用 request.user
来引用模板中的当前用户。
另一种解决方案是通过设置 UpdateView
来简单地更改变量 context_object_name
的名称:
class MyView(UpdateView):
...
context_object_name = 'other_user' # any preferred name
...
现在在模板中,您将更新的用户称为 other_user
。
还可以选择向模板添加自定义上下文处理器,该选项将添加一个变量,其中包含具有不同名称的请求用户(可能是 current_user
),但这对于这个简单的操作来说会做太多工作名称冲突问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。