Django-allauth NoReverseMatch Error for 'account_login' with Custom URL Patterns

Я работаю над проектом Django, который включает аутентификацию пользователей с помощью django-allauth. Я настроил пользовательские шаблоны URL, которые включают параметр library_slug для целей многопользовательского доступа. Однако при переходе на страницу регистрации (http://localhost:8000/bgrobletest/accounts/signup/) я сталкиваюсь с ошибкой NoReverseMatch:

Вот соответствующий трассировочный бэкграунд:

Traceback (most recent call last):
  File "/Users/williamgroble/lib_man/env/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  ...
  File "/Users/williamgroble/lib_man/env/lib/python3.12/site-packages/allauth/account/views.py", line 173, in get_context_data
    login_url = self.passthrough_next_url(reverse("account_login"))
  File "/Users/williamgroble/lib_man/env/lib/python3.12/site-packages/django/urls/base.py", line 88, in reverse
    return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
  File "/Users/williamgroble/lib_man/env/lib/python3.12/site-packages/django/urls/resolvers.py", line 851, in _reverse_with_prefix
    raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'account_login' with no arguments not found. 1 pattern(s) tried: ['(?P<library_slug>[^/]+)/accounts/login/\\Z']

Вот мои соответствующие файлы

users/urls.py:

from django.urls import path
from . import views

app_name = 'users'

urlpatterns = [
    path('<slug:library_slug>/accounts/signup/', views.CustomSignupView.as_view(), name='account_signup'),
    path('<slug:library_slug>/accounts/login/', views.CustomLoginView.as_view(), name='account_login'),
    # other patterns...
]

lib_man/urls.py:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('<slug:library_slug>/accounts/', include('users.urls', namespace='users')),
    # other patterns...
]

users/views.py

from django.shortcuts import render, get_object_or_404
from allauth.account.views import SignupView
from catalog.models import Library
from .user_forms import CustomSignupForm
import logging

logger = logging.getLogger(__name__)

class CustomSignupView(SignupView):
    form_class = CustomSignupForm
    template_name = 'account/signup.html'  # Set the custom template

    def dispatch(self, request, *args, **kwargs):
        library_slug = kwargs.get('library_slug')
        logger.debug(f"Dispatching signup view with request: {request}")
        logger.debug(f"Library slug from URL kwargs: {library_slug}")

        if not library_slug:
            logger.error("No library_slug provided in URL kwargs.")
            raise ValueError("No library_slug provided.")

        self.library = get_object_or_404(Library, slug=library_slug)
        logger.debug(f"Library object found: {self.library}")

        return super().dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['library_slug'] = self.library.slug
        return context

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['library'] = self.library
        logger.debug(f"Form kwargs: {kwargs}")
        return kwargs

Похоже, что проблема возникает из-за того, что обратная функция в allauth пытается сгенерировать URL для 'account_login' без указания необходимого аргумента library_slug. Я пробовал всячески изменять файлы урлов и не могу понять, в чем дело.

Вопросы:

Как правильно передать параметр library_slug в обратную функцию в данном контексте? Есть ли лучший подход к обработке многопользовательских отношений с помощью django-allauth? Любая помощь будет очень признательна!

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