Пользователь доступен в представлениях, но не в шаблоне

Я пытаюсь использовать {% if user.is_authenticated %} в шаблоне, но пользователь фактически не существует. Если я пытаюсь вывести {{ user }}, то ничего нет.

В настройках у меня есть такие опции для ТЕМПЛАТОВ:

"context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",

Я разработал класс бэкенда аутентификации для использования учетных данных активного каталога и добавил класс в AUTHENTICATION_BACKENDS в settings.py.

class CustomAuthenticationBackend(ModelBackend):

    def authenticate(self, request, username=None, password=None, **kwargs):
    
        """
        Authenticate user from active directory
        If user is not found, create it
        """

        # Get user from database
        try:
            user = User.objects.get(username=username)

        # If user does not exist, create it
        except User.DoesNotExist:
            user = User(username=username)
            user.displayed_name = kwargs['display_name']
            user.email = kwargs['email']
            user.save()

        return user


    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

Я добавил логику аутентификации и логику входа в django Form:

    def authenticate_and_login(self, request) -> bool:

        """
        Method to authenticate the user and login
        return True if user is authenticated and logged in
        or False and fill the form with errors
        """

        is_logged = False

        # Init active directory service
        ad_service = ActiveDirectoryService()

        # Get username and password
        username = self.cleaned_data['username']
        password = self.cleaned_data['password']

        # Get authorized user from active directory
        user = None
        try:
            user = ad_service.get_authorized_user(username, password)
        except:
            self.add_error(None, "Invalid credentials")
            return is_logged

        # Case user is authorized
        if user is not None:

            # Authenticate user and login
            user = auth.authenticate(request=request, username=username, display_name=user['display_name'], email=user['email'])
            request.user = user
            auth.login(request, user)
            is_logged = True

        # Case user is not authorized
        else:
            self.add_error(None, "Unauthorized user")
        
        return is_logged

После входа в систему я выполняю этот код в классе представления:

print("User is authenticated: {}".format(request.user.is_authenticated))

, который выводит то, что ожидается: "Пользователь аутентифицирован: True". Когда я пытаюсь использовать {{ user }} или {% if user.is_authenticated %} ничего не происходит, так как кажется, что переменная user не инициализирована в шаблоне.

Мое представление наследуется от родительского представления, которое наследуется от класса django View. В этом базовом классе я просто добавляю navbarviewmodel к контексту:

class BaseView(View):

    """
    Base class for all views in app
    """

    def __init__(self):
        super(BaseView, self).__init__()
        self.context = {}

    def get(self, request, *args, **kwargs):

        # Set navbar
        self.context['navbar_vm'] = NavbarViewModel(
            ...
        )

Кто-нибудь видит, каких компонентов мне не хватает, или что я неправильно настроил, что нарушило настройку пользователя в шаблонах django?

В моем проекте для добавления пользователя в контекст я создал mixin, используемый в большинстве моих представлений, основанных на классах:

from django.views.generic.base import ContextMixin

class UserInContext(ContextMixin):
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['user'] = self.request.user
        return context

вы можете использовать его следующим образом:

class BaseView(View, UserInContext):
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        [...]
Вернуться на верх