用户列表中的user.is_authenticated

时间:2017-09-19 14:52:02

标签: django django-users

尽管进行了很多搜索,我还没有找到解决问题的方法:经过身份验证的用户的内容不会显示在显示用户列表的视图上。

我的应用有一个显示用户列表的视图:

views.py

def UserListView(request):
    user = User.objects.all().order_by('-date_joined')
    return render(request, 'accounts/user_list.html', {"user": user})

带有此导航栏的基本模板:

base.html文件

<nav class="navbar">
  <ul>
    {% if user.is_authenticated %}
      <li><a class="nav-item" href={% url 'logout' %}>Logout</a></li>
    {% else %}
      <li><a class="nav-item" href={% url 'login' %}>Login</a></li>
    {% endif %}
  </ul>
</nav>

即使用户已登录,菜单也会显示“登录”而不是“注销”。 我怀疑上下文的问题? 欢迎任何建议:)

1 个答案:

答案 0 :(得分:2)

视图中的变量user与auth上下文处理器中的user发生冲突。由于视图中的变量是查询集,因此它没有is_authenicated属性,因此{% if user.is_authenticated %}始终评估为False

由于视图会显示多个用户的列表,因此最好将其重命名为users

def user_list_view(request):
    users = User.objects.all().order_by('-date_joined')
    return render(request, 'accounts/user_list.html', {"users": users})

然后,您需要更改accounts/user_list.html模板中的循环,例如:

{% for u in users %}
  {{ u.username }}
{% endfor %}