/accounts/login не сопоставляется, если не указаны только корневые пути к размещенному приложению

Я использую Django 5.2.3 и пытаюсь использовать встроенную систему входа в систему, для этого я определил путь внутри своего приложения users/urls.py:

from django.urls import path, include
from . import views

urlpatterns = [
    path("accounts/", include("django.contrib.auth.urls")),
]

Если я перейду по URL-адресу http://127.0.0.1:8000/accounts/login/, то выдам следующую ошибку:

The current path, accounts/login/, didn’t match any of these.

Я исправил проблему, добавив следующий путь к диспетчеру URL внутри urls.py на уровне проекта (мой project/urls.py):

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('users.urls')) # This fixed the issue
]

И теперь форма входа в систему корректно отображается по адресу http://127.0.0.1:8000/accounts/login/

Однако, когда я попробовал использовать другой путь, например, следующий, это не сработало:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')) # This doesn't work, same error thrown
]

Почему это работает с path('', include('users.urls')), а не path('users/', include('users.urls'))?

Почему это работает с path('', include('users.urls')), а не path('users/', include('users.urls'))?

Потому что 'users/' в path('users/', include('users.urls')) указано, с чего начинается путь, чтобы перейти к user.urls.

Таким образом, каждый путь проверяет, начинается ли путь с определенной строки, затем "съедает" эту строку и позволяет содержащемуся в ней urls обрабатывать ее дальше.

с помощью:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include('users.urls'))
]

вы можете перейти в режим входа в систему, но по адресу:

http://127.0.0.1:8000/users/accounts/login/

Поскольку корень urls.py проверяет, начинается ли путь с users/ и удаляет users/, то user.urls проверяет, начинается ли он с accounts/ и удаляет его, и, наконец, модуль urls из django.contrib.auth проверит, начинается ли путь (и заканчивается ли) с login/.

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