Django URLCONF и реверс
Я пытаюсь понять, как django связывает основной urls.py с шаблонами url другого приложения - в моем случае у меня есть 2 приложения: loginpage и signup. Я определил в главном urls.py следующее:
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('loginpage.urls')),
path('signup/',include('signup.urls')),]
и это в loginpage.urls:
app_name='loginpage'
urlpatterns = [
path('',views.login_page_fetch,name='login_page_fetch'),
path('Verification/',views.check_user,name='check_user')
]
Я создал функцию в loginpage/views, которая получает шаблон и забирает его:
def login_page_fetch(request):
return render(request,'loginpage/login.html')
Теперь в моей регистрации/просмотрах я создал функцию, которая создала пользователя и т.д.. в конце она должна будет перенаправить его на страницу входа:
def create_user(request):
user=User()
user.first_name=request.POST.get('firstname')
user.last_name=request.POST.get('familyname')
user.email_address=request.POST.get('email')
user.password=request.POST.get('psw')
user.save()
return HttpResponseRedirect(reverse('loginpage:login_page_fetch')) *//*
Я не могу понять, начиная отсюда // как django находит функцию login_page_fetch - он начинает искать в основном файле urls.py, чтобы найти путь, где она сопоставлена с loginpage.urls?
Да, Django URL resolver:
- запускает корневой URL-резольвер запроса (обычно это основной модуль
urls, но может быть и другой), возможно, со знанием пространства имен URL текущего запроса для преобразования имен без пространства имен в текущее пространство имен - просматривает пространство имен и имя каждого элемента URL (проходя "в"
include, чтобы найти больше элементов), чтобы увидеть, соответствуют ли они тому, что вы пытаетесьreverse.
- если он находит соответствие по пространству имен, он пытается "подогнать" параметры к шаблону, и если это работает, вы получаете соответствующий URL.
- Если все варианты исчерпаны, выдается ошибка.