/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/.