{{% if user.is_authenticated %}} 无法正常工作,它始终显示经过身份验证的块,而不是其他块

问题描述 投票:0回答:1

......urls.py.........

from django.contrib import admin

from django.urls import path, include
from user import views as user_view
from django.contrib.auth import views as auth_views
from django.views.generic import TemplateView
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('dashboard.urls')),
    path('register/', user_view.register, name = 'user-register'),
    path('profile/', user_view.profile, name = 'user-profile'),
    path('', auth_views.LoginView.as_view(template_name = 'user/login.html'),name='user-login'),
    path('logout/', TemplateView.as_view(template_name = 'user/logout.html'),name='user-logout' ),
    
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

.......views.py........

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from .forms import CreateUserForm
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required



def register(request):
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('user-login')
    else:
        form = CreateUserForm()
    context = {
        'form': form,
    }
    return render(request, 'user/register.html',context)


def profile(request):
    return render(request, 'user/profile.html')

......nav.html........

<nav class="navbar navbar-expand-lg navbar-info bg-info">
    {% if user.is_authenticated %}
    <div class="container">
        <a class="navbar-brand text-white" href="{% url 'dashboard-index' %}">NTPC Inventory</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                    <a class="nav-link text-white" href="{% url 'dashboard-index' %}">Dashboard <span
                            class="sr-only">(current)</span></a>
                </li>
            </ul>
            
            <ul class="navbar-nav ml-auto">
                <li class="nav-item active">
                    <a class="nav-link text-white" href="profile.html">Admin Profile <span
                            class="sr-only">(current)</span></a>
                </li>
                <li class="nav-item">
                    <a class="nav-link text-white" href="{% url 'user-logout' %}">Logout</a>
                </li>
            </ul>
            
           <!-- problem is not solved as is.authenticated is not working as it show logout and admin profile for the same still finding out the solution -->
          {% else  %} 
            <ul class="navbar-nav ml-auto">
                <li class="nav-item active">
                    <a class="nav-link text-white" href="{% url 'user-register' %}">Register <span
                            class="sr-only">(current)</span></a>
                </li>
                
                <li class="nav-item">
                    <a class="nav-link text-white" href="{% url 'user-login' %}">Login</a>
                </li>
            </ul>
            {% endif %}
        </div>
    </div>
</nav> 

我尝试导入不同的库,但仍然找不到解决方案,每当我清除 Chrome 的 cookie 时,它仅在我重新加载后才适用于该页面的单次加载,它再次出现相同的情况。

它在导航中显示经过身份验证的块 管理员个人资料注销 但不显示注册登录选项。

python django authentication django-views django-forms
1个回答
0
投票

你的 Jinja 语法需要稍微改变一下。如果您想在 django 模板中检查用户是否经过身份验证,您需要按如下方式执行此操作:

{% if request.user.is_authenticated %}
          <a href="{% url 'user-logout' %}" class="appointment-btn scrollto">Logout</a>
          <a href="{% url 'user-profile' %}" class="appointment-btn scrollto">Profile-{{ user.username }}</a>
{% else %}
          <a href="{% url 'user-login' %}" class="appointment-btn scrollto">Sign in / Sign up</a>
{% endif %}

您忘记了模板中的请求。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.