Django перенаправляет /D/<anything> на /d/<anything>
Я ищу способ перенаправить любой url, начинающийся с /D/
на тот же URL со строчными буквами /d/
.
/D/<anything_including_url_params>
to
/d/<anything_including_url_params>
Я буквально хочу перенаправлять только те адреса, которые начинаются с /D/
- не /DABC/
и т.д...
Суффикс также может быть пустым, например, /D/
> /d/
Есть ли способ сделать это в Django? Это для стороннего приложения с урлами, включенными в проекты urls.
Альтернативой является использование re_path
и изменение:
path("d/", include(...))
to
re_path(r"^[dD]/$", include(...))
но я бы лучше сделал перенаправление вместо этого.
Есть ли причина, по которой вы вообще не можете использовать RedirectView?
Согласно документации:
https://docs.djangoproject.com/en/4.1/ref/class-based-views/base/#redirectview
Вы можете зарегистрировать это как литерал /D/
, но перенаправить на /d/
, используя имя представления и передавая args или kwargs.
Вы можете сделать представление, которое направляет с:
# some_app/urls.py
from django.views.generic import RedirectView
# …
urlpatterns = [
path('d/', include(…)),
path(
'D/<path:path>',
RedirectView.as_view(
url='/d/%(path)s', query_string=True, permanent=True
),
),
]
Обратите внимание, что перенаправление всегда приводит к GET-запросу, поэтому даже если исходный запрос на D/something
является POST-запросом, например, он сделает GET-запрос на d/something
.