Как перенаправить неверный url с тем же шаблоном, который перепутал пользователь, в django, без javascript
предположим следующее:
Ваша модель имеет: Products.slug
урлы: path('<int:id>/<slug:slug>/', views.product_detail, name='product_detail'),
просмотров: products = Products.objects.get(id=id, slug=slug)
Кто-то переходит по ссылке /products/1/brazil-nuts/
, и он переходит на нужную страницу.
Но потом кто-то копирует/вставляет неправильный url в: /products/1/brazil-nu/
Тогда вы получите ошибку DoesNotExist
... Теперь вы можете "исправить" это, не заставляя аргумент slug=slug
в вашем запросе, но тогда url будет неверным, и люди смогут ссылаться с /products/1/brazil-nu-sjfhkjfg-dfh
, что неаккуратно.
Итак, как мне перенаправить неправильный url на правильный с той же структурой url, что и правильный (только аргументы id и slug), не полагаясь на JavaScript's window.history.pushState(null, null, proper_url);
при каждой загрузке страницы?
Я уже пробовал сделать тот же шаблон url для перенаправления, но так как django использует первое совпадение шаблона, он не будет работать независимо от того, куда вы поместите url в вашем списке.
Просто обновите свой вид:
products_q = Products.objects.filter(id=id, slug__startswith=slug)
products_count = products_q.count()
if products_count == 1:
product = products_q.first()
return reverse_lazy('product_detail', args=[product.id, product.slug])