Как обработать перенаправление для login_required в htmx partial view?

У меня есть два мнения.

class IndexView(TemplateView):
    template_name = 'index.html'

@require_POST
@login_required
def partial_view(request):
    return render(request, 'partials/stuff.html')

Я хочу, чтобы индексная страница была "публичной", но если пользователь выполняет действие (которое запускает частичный просмотр), он должен быть перенаправлен на LOGIN_URL, если не вошел в систему.

Проблема в том, что мое частичное представление возвращает всю страницу LOGIN_URL. Так что теперь есть страница внутри страницы.

Можно ли перенаправить "родительскую" страницу при использовании частичных представлений?

Мне не удалось заставить "перенаправление после входа" работать, но мое решение достаточно хорошо для моих нужд.

from django.contrib.auth import REDIRECT_FIELD_NAME
from django.conf import settings
from django.contrib.auth.decorators import login_required as django_login_required
from django.http import HttpResponse
from functools import wraps

from django.shortcuts import resolve_url


def login_required(function=None, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
    @wraps(function)
    def wrapper(request, *args, **kwargs):
        if not request.user.is_authenticated and request.htmx:
            resolved_login_url = resolve_url(login_url or settings.LOGIN_URL)
            return HttpResponse(status=204, headers={'HX-Redirect': resolved_login_url})
        return django_login_required(
            function=function,
            login_url=login_url,
            redirect_field_name=redirect_field_name
        )(request, *args, **kwargs)
    return wrapper

Вернуться на верх