Уведомления

Группа в Telegram: присоединиться

#1 Сен. 21, 2019 21:21:30

mblandr
Зарегистрирован: 2019-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

Приветствую!
Помогите пожалуйста, начинающему понять логику работы urlConfig. Django 2.2, создано простейший проект и в нем простейшее приложение pages. Вот urpatterns проекта:

   
urlpatterns=[
    path('admin/',admin.site.urls),
    path('',include('Pages.urls')),
]
Вот приложения:
   
urlpatterns=[
    path('',views.showPage),
    path('test',views.showTest),
]
Почему на запрос test срабатывает showTest? Где я не понимаю логики работы? ‘test’ не соответствует ни ‘admin’, ни ‘', должно возвращаться 404?
Предположим, что ’' соответствует любой строке запроса. Но тогда
1)почему на test срабатывает showtest, а не showpage?
2)почему на запрос, например, anothertest возвращается 404, а не срабатывает showPage?
3)почему на таком urlconfigs у проекта:
   
urlpatterns=[
    path('admin/',admin.site.urls),
    path('',views.showProjectPage),
]
на любой запрос получаю 404, а showProjectPage не срабатывает?

Если же обрабатываются все urlconfigs, и проекта и приложений, то почему, если убрать path c include из urlconfig проекта, то urlconfig приложения не обрабатывается? Помогите разобраться.

Отредактировано FishHook (Сен. 21, 2019 21:26:50)

Офлайн

#2 Сен. 21, 2019 21:28:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7112
Репутация: +  480  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

mblandr
Почему на запрос test срабатывает showTest?
да же не знаю, что вам сказать.

   
path('test',  views.showTest),

вот это не очевидно?



Офлайн

#3 Сен. 21, 2019 21:30:38

mblandr
Зарегистрирован: 2019-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

path('test', views.showTest) находится в urlconfig у приложения pages. Как он попал на этот path?

Отредактировано mblandr (Сен. 21, 2019 21:30:49)

Офлайн

#4 Сен. 21, 2019 21:36:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7112
Репутация: +  480  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

mblandr
Как он попал на этот path?

Эмммм, вот так

urlpatterns=[
path('admin/',admin.site.urls),
path('',include('Pages.urls')), # вот тут и попал
]



Офлайн

#5 Сен. 21, 2019 21:37:46

mblandr
Зарегистрирован: 2019-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

Да, но я же написал, что в этом path ‘' не соответствует запросу ’test', почему сработал include?

Офлайн

#6 Сен. 21, 2019 21:58:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7112
Репутация: +  480  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

mblandr
Да, но я же написал, что в этом path ‘' не соответствует запросу ’test', почему сработал include?
Инклуд собирает ВСЕ ваши урлы в единую иерархию. Вы присоединили ваш “Pages.urls” с ключом “”, почему по-вашему этот путь должен находиться в иерархии путей выше корня и что значит
mblandr
сработал include
.
Он в любом случае срабатывает, “срабатывание” происходит на этапе импорта.



Отредактировано FishHook (Сен. 21, 2019 21:58:51)

Офлайн

#7 Сен. 21, 2019 22:19:22

mblandr
Зарегистрирован: 2019-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

Подождите, я правильно понял?
path(route,include('…')) не означает, что содержимое include будет включено, только если url запроса соответствует route -
это я так полагал,
а означает, что url диспетчер, когда дойдет до этой строки, включит содержимое include в любом случае, но сравниваться будет с частью строки запроса, у которой вырезано совпавшее с route?

Отредактировано mblandr (Сен. 21, 2019 22:21:14)

Офлайн

#8 Сен. 21, 2019 23:31:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7112
Репутация: +  480  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

mblandr
Django-приложение - это wsgi приложение, если вы раньше писали на ПХП, то забудьте. Питоний скрипт в рамках WSGI не стартует каждый раз заново при обращении веб-сервера. Наоборот, веб-сервер обращается к уже запущенному экземпляру и после отработки запроса экземпляр не удаляется из памяти. То есть конфигурация УРЛов, ОРМов и прочего бойлейплейта сохраняется между запросами. То что вы сконфигурировали загружается в память один раз и живет все время работы сервера

не означает, что содержимое include будет включено, только если url запроса соответствует route

это содержимое включается единожды и потом работает как шаблон для выбора того или иного контроллера. Сама конфигурация урлов никак не зависит от запроса.



Офлайн

#9 Сен. 22, 2019 08:43:18

mblandr
Зарегистрирован: 2019-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

Спасибо, что помогли разобраться

Офлайн

#10 Сен. 23, 2019 15:58:23

mblandr
Зарегистрирован: 2019-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

urlConfig я что-то не понимаю

Кстати, вы все таки неправы в

FishHook
Сама конфигурация урлов никак не зависит от запроса.
в отладочных сообщениях django показывает какой список urlpatterns он обрабатывает, и там четко видно, что если шаблон не соответствует url, то urlconfig, указанный в include, не загружается. Другое дело, что я не понимал, что если в path используется include (или если указана не view, а функция, возвращающая какой-то список из path), то сравнение url и шаблона происходит не 1:1, а проверяется, начинается ли url с шаблона

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version