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.

Вернуться на верх