首页 > 解决方案 > Django - 用户登录时导航栏未正确显示

问题描述

我有一个包含以下路径的网站:

urlpatterns = [
 path('admin/', admin.site.urls),
 path('register/', user_views.register, name='register'),
 path('profile/', user_views.profile, name='profile'),
 path('login/', auth_views.LoginView.as_view(template_name='pages/login.html'), name='login'),
 path('logout/', auth_views.LogoutView.as_view(template_name='pages/logout.html'), name='logout'),
 path('mydata/', user_views.mydata, name="data"),
 path('', include('mysite.urls')),
]

视图目录中的每个编码部分前面都有:

from django.contrib.auth.decorators import login_required
[...]
@login_required
def profile(request):
[...]
@login_required
def mydata(request):
[...]

我的问题是我希望用户只能看到 'profile' 和 'logout' ,而不是 'login' 或 'register',逻辑适用于每个路径,除了 /mydata 我不知道为什么.

至于我的 HTML 文件,base.html如下所示:

              {% if user.is_authenticated %}
                  <a class="nav-item nav-link" href="/profile">Profile</a>
                  <a class="nav-item nav-link" href="/logout">Logout</a>             
              {% else %}
                  <a class="nav-item nav-link" href="/login">Login</a>
                  <a class="nav-item nav-link" href="/register">Register</a>
              {% endif %}

我将它包含在mydata.html文件中,如下所示:

{% extends "pages/base.html" %}

{% block content %}
[...]
{% endblock content %}

我的问题是:有什么方法可以确保用户经过身份验证@/mydata?

我还是比较新的,所以欢迎你的意见。

标签: htmldjango

解决方案


这是一个奇怪的情况,我想因为我事先使用了@login_required,所以没有注销的用户可以访问这个页面,因此我决定将我的 base.html 文件更改为:

      {% if user.is_authenticated %}
          <a class="nav-item nav-link" href="/profile">Profile</a>
          <a class="nav-item nav-link" href="/logout">Logout</a>             
      {% elif request.path == data %}
          <a class="nav-item nav-link" href="/profile">Profile</a>
          <a class="nav-item nav-link" href="/logout">Logout</a>              
      {% else %}
          <a class="nav-item nav-link" href="/login">Login</a>
          <a class="nav-item nav-link" href="/register">Register</a>
      {% endif %}

现在一切正常!希望它可以帮助别人


推荐阅读