Неправильно выполняется условие {% if not request.user.is_authenticated %}
Необходимо чтобы для авторизованного пользователя отображалась кнопка "Профиль", а для неавторизованного кнопка "Войти"
base.html
{% if not request.user.is_authenticated %}
<div class="auth__div">
<a class="a_login" href="{% url 'users:login' %}">
<button class="auth__btn">
<span class="auth__enter">Войти</span>
</button>
</a>
</div>
{% else %}
<div class="profile">
<a class="a_login" href="{% url 'users:profile' %}">
<button class="auth__btn">
<span class="profile__span">Профиль</span>
</button>
</a>
</div>
{% endif %}
Проблема в том, что и у авторизованного пользователя, и у неавторизованного отображается "Войти", а "Профиль" не отображается ни в каком случае. Если убрать request и оставить {% if not user.is_authenticated %} ничего не поменяется.
UPD:
views.py
:
def registration(request):
if request.method == 'POST':
form = RegistrationUserForm(data=request.POST)
if form.is_valid():
form.save()
user = form.instance
auth.login(request, user)
return HttpResponseRedirect(reverse('home'))
else:
form = RegistrationUserForm()
context = {
'title': 'Home - Регистрация',
'form': form
}
return render(request, 'users/registration.html', context)
def login(request):
if request.method == 'POST':
form = LoginUserForm(data=request.POST)
if form.is_valid():
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user:
auth.login(request, user)
return HttpResponseRedirect(reverse('home'))
else:
form = LoginUserForm()
context = {
'title': 'Home - Авторизация',
'form': form
}
return render(request, 'users/login.html', context)
def profile(request):
p = render_to_string('users/profile.html')
return HttpResponse(p)
def logout(request):
auth.logout(request)
return redirect(reverse('home'))
Сам нашел в чем была ошибка и, как обычно, все элементарно:
в views.py
основного приложения было следующее:
def index(request):
p = render_to_string('base.html')
return HttpResponse(p)
Собственно это была изначальная заглушка через которую не передается context
. Для решения проблемы было достаточно поменять функцию с использованием render
вместо HttpResponse
.
Таким образом получается:
def index(request):
return render(request, 'base.html')