Вы можете создать базовый c RedirectView , который будет перенаправлять на подробный вид с именем продукта в нижнем регистре
from django.views.generic.base import RedirectView
class ProductLowerCaseRedirectView(RedirectView):
permanent = True
query_string = True
pattern_name = 'product_detail_view'
def get_redirect_url(self, *args, **kwargs):
kwargs['productName'] = kwargs['productName'].lower()
return super().get_redirect_url(*args, **kwargs)
Теперь вы можете использовать тот факт, что Django пробегает ваши URL-адреса последовательно в ваших интересах. Вы создаете шаблон, который только принимает названия продуктов в нижнем регистре, это ваш основной вид, у вас также есть представление перенаправления, принимающее все запросы по тому же пути, но не в нижнем регистре
re_path(r'^products/(?P<productName>[a-z]*)/$', product_detail_view, name='product_detail_view')
path('products/<str:productName>/', ProductLowerCaseRedirectView.as_view())