Неправильно выполняется условие {% 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 шт):

Автор решения: Elliot13

Не нужно никаких 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 %}
→ Ссылка
Автор решения: kurenma

Сам нашел в чем была ошибка и, как обычно, все элементарно:

в 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')
→ Ссылка