- Содержит список
urlpatterns
, определяющий маршруты URL для приложения или всего проекта. - Использует функцию
path()
(илиre_path()
для регулярных выражений).# Пример urls.py приложения from django.urls import path from . import views # Импорт представлений из текущего каталога urlpatterns = [ # Путь к главной странице приложения (пустая строка после префикса проекта) path('', views.index, name='app_index'), # Путь с параметром path('article/<int:article_id>/', views.article_detail, name='article_detail'), ] # views.index - функция-представление, которая выполнится при переходе # по URL, соответствующему этому пути. # name='...' - имя URL, используется для reverse() и тега {% url %}
- Конвертеры путей: Используются для извлечения параметров из URL.
- Синтаксис:
path('route/<converter_name:variable_name>/', ...)
- Стандартные конвертеры:
str
: Любая строка без слэша (/
). Пример:.../<str:category_slug>/
int
: Любое целое число. Пример:.../<int:post_id>/
path
: Любая строка, включая слэши. Пример:.../<path:file_path>/
slug
: Строка из букв ASCII, цифр, дефиса и подчеркивания. Пример:.../<slug:article_slug>/
uuid
: Соответствует формату UUID. Пример:.../<uuid:user_uuid>/
- Создание пользовательских конвертеров:
- Создать класс конвертера в файле (например,
converters.py
).# converters.py (в приложении) class FourDigitYearConverter: regex = r'[0-9]{4}' # Регулярное выражение для соответствия # Метод для преобразования строки из URL в Python-объект def to_python(self, value): return int(value) # Метод для преобразования Python-объекта в строку для URL def to_url(self, value): return f"{value:04d}" # Форматируем как 4 цифры
- Зарегистрировать и использовать конвертер в
urls.py
.# urls.py (в приложении) from . import converters from django.urls import path, register_converter from . import views # Регистрируем конвертер под именем 'year4' register_converter(converters.FourDigitYearConverter, 'year4') urlpatterns = [ path('archive/<year4:year>/', views.archive, name='archive'), # ... ]
- Создать класс конвертера в файле (например,
- Синтаксис:
- Обработка ошибок URL (в основном
urls.py
проекта):- Можно определить пользовательские представления для стандартных ошибок HTTP.
handler400 = 'views.bad_request_view'
handler403 = 'views.permission_denied_view'
handler404 = 'views.page_not_found_view'
handler500 = 'views.server_error_view'
- Функции-обработчики должны принимать
request
и (для 4xx/500)exception
в качестве аргументов.# Пример обработчика 404 в views.py from django.http import HttpResponseNotFound def custom_page_not_found_view(request, exception): return HttpResponseNotFound('<h1>Страница не найдена :(</h1>')
- Вызов 404 из представления: Используйте исключение
Http404
.from django.http import HttpResponse, Http404 def posts_list(request, year): if not (1990 <= year <= 2024): # Пример проверки raise Http404("Записи за такой год не найдены.") return HttpResponse(f"Записи за {year} год.")
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰