Ответ
Django обрабатывает URL-адреса с помощью механизма URL-диспетчера (URL dispatcher). Его основная задача — сопоставить запрошенный URL с конкретной функцией или классом-представлением (view), который сгенерирует ответ.
Процесс состоит из следующих шагов:
- Входная точка: Веб-сервер передает запрос Django. Django определяет корневой файл URL-конфигурации (обычно
urls.pyв папке проекта), указанный в настройкеROOT_URLCONF. - Поиск по
urlpatterns: Django последовательно перебирает все шаблоны в спискеurlpatternsв этом файле. - Первое совпадение: Как только находится первый шаблон, соответствующий запрошенному URL, поиск прекращается.
- Вызов View: Django вызывает связанную с этим шаблоном view-функцию, передавая ей объект
HttpRequestи любые параметры, извлеченные из URL (например,yearизarticles/<int:year>/). - Генерация ответа: View-функция обрабатывает запрос и возвращает объект
HttpResponse.
Пример urls.py:
from django.urls import path
from . import views # views.py в том же приложении
urlpatterns = [
# URL: /articles/
path('articles/', views.article_list, name='article-list'),
# URL: /articles/2023/
# <int:year> - это "конвертер пути", который захватывает целое число
# и передает его в view как аргумент `year`
path('articles/<int:year>/', views.article_archive, name='article-archive-year'),
]
Ключевые особенности системы:
- Конвертеры путей (Path Converters): Использование
int:,slug:,str:для автоматического захвата и преобразования типов параметров из URL. - Обратный вызов URL (Reverse URL resolving): Использование имен (
name='article-list') для генерации URL в шаблонах и коде ({% url 'article-list' %}), что делает код более гибким и устойчивым к изменениям. - Вложенные
urlpatterns: Возможность подключать файлыurls.pyиз отдельных приложений с помощью функцииinclude(), что способствует модульности. - Регулярные выражения: Для сложных шаблонов можно использовать
re_path()вместоpath().