Проверка параметров маршрутов в Django
Конвертеров int и slug
хватает не всегда. Например, нужна
дата вида '2024-01-15' или
одно из нескольких слов. Тогда
маршрут задают через re_path
и регулярное выражение.
Импортируйте re_path и опишите
параметр именованной группой
в регулярном выражении:
from django.urls import path, re_path
from main import views
urlpatterns = [
re_path(
r'^posts/(?P<date>\d{4}-\d{2}-\d{2})/$',
views.posts_by_date
),
]
В представлении примите аргумент
с тем же именем, что и в группе
(?P<date>...). В него
попадет кусок URL, подошедший
под регулярку:
from django.http import HttpResponse
def posts_by_date(request, date):
return HttpResponse('posts for ' + date)
Еще пример: параметр может быть только одним из заданных слов:
urlpatterns = [
re_path(
r'^users/(?P<order>name|surname|age)/$',
views.users_order
),
]
Сделайте маршрут вида
/posts/:date/, где вместо
date должна быть дата
в формате год-месяц-день.
Проверьте формат через
re_path.
Сделайте маршрут вида
/users/:order/, где вместо
order должно быть одно
из значений: 'name',
'surname' или 'age'.
Сделайте маршрут вида
/product/:code/, где
code - ровно 4 цифры.