Неправильно выполняется условие {% 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 %} ничего не поменяется.
Ответы (2 шт):
Не нужно никаких not.
Нужно вот так:
{% if request.user.is_authenticated %}
<div class="profile">
<a class="a_login" href="{% url 'users:profile' %}">
<button class="auth__btn">
<span class="profile__span">Профиль</span>
</button>
</a>
</div>
{% else %}
<div class="auth__div">
<a class="a_login" href="{% url 'users:login' %}">
<button class="auth__btn">
<span class="auth__enter">Войти</span>
</button>
</a>
</div>
{% endif %}
Сам нашел в чем была ошибка и, как обычно, все элементарно:
в 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')