Хорошо, у меня есть простая настройка со страницами, принадлежащими определенным категориям.
В моих URL-адресах у меня есть
path('<slug:category_slug>/', views.PageByCategoryView.as_view(), name='page_by_category'),
path('<slug:category_slug>/<slug:page_slug>/', views.PageDetailView.as_view(), name='page_detail'),
Так, например;
www.mywebsite.com/activities/cycling/
указывает на правильный подробный просмотр страницы о велосипеде.
Теперь я подумал, что было бы неплохо, если бы мы могли сократить URL как;
www.mywebsite.com/cycling/
Итак, я написал следующее представление:
def redirect_with_category(request, page_slug):
'''
This redirect view points to the canonical url
'''
page = get_object_or_404(Page, slug=page_slug)
return redirect(page, permanent=True)
urls.py выглядит так:
path('<slug:category_slug>/', views.PageByCategoryView.as_view(), name='page_by_category'),
path('<slug:page_slug>/', views.redirect_with_category, name='page_detail_redirect'),
path('<slug:category_slug>/<slug:page_slug>/', views.PageDetailView.as_view(), name='page_detail'),
А теперь у нас проблемы, хотя редирект работает. Django перестает пытаться решить category_slug, если не может найти совпадения.
Каким-то образом, чтобы это работало, Django должен попытаться разрешить следующий путь, если он не найдет совпадения в category_slug .
Видимо Django выдает ошибку согласно документации; « или если на каком-либо этапе этого процесса возникает исключение, Django вызывает соответствующее представление обработки ошибок »
Можно ли как-нибудь решить эту проблему? Можно ли заставить Django искать следующие совпадающие результаты, если он не находит подходящего слага в первом URL-адресе?
Итак, я хочу перенаправить;
www.mywebsite.com/cycling/ К: www.mywebsite.com/activities/cycling/