Как перенаправить неверный 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])
Вернуться на верх