{{% if user.is_authenticated %}} не работает должным образом, он всегда показывает аутентифицированный блок, а не блок else
.................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>
Я пробовал импортировать различные библиотеки, но так и не смог найти решение, всякий раз, когда я очищаю куки в хроме, это работает для той единственной загрузки страницы, только когда я перезагружаю, он снова приходит к тому же .
В навигаторе блок аутентификации отображается как Выход из профиля администратора но не показывает опцию входа в реестр.
Ваш синтаксис 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 %}
Вы забываете о запросе в шаблоне. Также вы можете проверить, аутентифицирован пользователь или нет, в представлениях следующим образом :
def profile(request):
if request.user.is_authenticated:
return render(request, 'user/profile.html', {'user':request.user})
else:
return redirect('user-login')