Перед рассмотрением URLconf разберемся как Django обрабатывает запрос.

Когда пользователь запрашивает страницу вашего сайта на Django, система следует этому алгоритму, чтобы определить, какой код Python выполнить:

  1. Django определяет используемый корневой модуль URLconf. Обычно это значение параметра ROOT_URLCONF, но если входящий объект HttpRequest имеет атрибут urlconf (установленный промежуточным программным обеспечением), его значение будет использоваться вместо параметра ROOT_URLCONF.
  2. Django загружает этот модуль Python и ищет переменную urlpatterns. Это должна быть sequence (последовательность( экземпляров django.urls.path() и/или django.urls.re_path().
  3. Django проходит по каждому шаблону URL по порядку и останавливается на первом, который соответствует запрошенному URL, сопоставляя его с path_info.
  4. Как только один из шаблонов URL совпадает, Django импортирует и вызывает заданное представление, которое является функцией Python (или представление на основе классов). Представлению передаются следующие аргументы:
    • Экземпляр HttpRequest.
    • Если сопоставленный шаблон URL не содержит именованных групп, то совпадения из регулярного выражения предоставляются как позиционные аргументы.
    • Ключевые аргументы состоят из любых именованных частей, совпадающих с указанным выражением пути, переопределенных любыми аргументами, указанными в необязательном аргументе kwargs для django.urls.path() или django.urls.re_path().
  5. Если шаблон URL-адреса не совпадает или если на каком-либо этапе этого процесса возникает исключение, Django вызывает соответствующее представление обработки ошибок.
    Схему обработки запроса в Django можно найти тут.

URLconf

URLconf — это настройки маршрутов в Django или сопоставление URL с представлением в файле urls.py.

Самый простой маршрут выглядит следующим образом:

from django.url import path
from . import views

urlpatterns = [
path('', views.index, name='index'),
]

Аргументы функции path()

Аргумент view

Когда Django находит соответствующий шаблон, он вызывает указанную функцию представления с объектом HttpRequest в качестве первого аргумента и любые «захваченные» значения из маршрута в качестве аргументов ключевого слова.

Аргумент kwargs

Произвольные ключевые аргументы могут быть переданы в словаре в целевое представление.

Аргумент name

Присвоение имени URL-адресу позволяет вам однозначно ссылаться на него из других мест Django, особенно из шаблонов. Эта мощная функция позволяет вам вносить глобальные изменения в шаблоны URL вашего проекта, касаясь только одного файла.

Aргумент route

route — строка, содержащая шаблон URL. При обработке запроса Django начинается с первого шаблона в urlpatterns и пробирается вниз по списку, сравнивая запрошенный URL с каждым шаблоном, пока не найдет тот, который соответствует.

include()

Для упрощения добавления и запуска URL-адресов можно воспользоваться функцией include(). Желательно ей пользоваться всегда, кроме случая работы с маршрутом admin.site.urls.

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

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

Функция include() позволяет ссылаться на другие URLconfs. Всякий раз, когда Django встречает include(), он отсекает любую часть URL-адреса, совпадающую с этой точкой, и отправляет оставшуюся строку во включенный URLconf для дальнейшей обработки.

Идея, стоящая за include(), состоит в том, чтобы упростить добавление и воспроизведение URL-адресов. Так как опросы находятся в их собственном URLconf(tests/urls.py), их можно поместить в «/tests/», или в «/fun_tests/», или в «/content/tests/», или по любому другому корневому пути, и приложение все равно будет работать.

В заключении предлагаем ознакомиться о всеми нашими обучающими статьями в разделе для обучения, или задать вопрос нам в наших сообществах.

Happy Python
__EasyPy__