Динамическая маршрутизация URL Django

Я создал динамический url маршрутизацию/просмотр для каждого из продуктов на моем сайте, Все работает нормально, пока я не перехожу к Cart/checkout и он загружает страницу продукта в настоящее время в Cart вместо Cart.html и Checkout.html

urlpatterns = {
    path('<str:pk>/', views.dynamic_product_view, name='productdetail'),
}

views.py:

def dynamic_product_view(request, pk=None):
    products = Product.objects.all()
    slug=None
    data = cartData(request)
    items = data['items']
    if pk is not None:
        try:
            slug = Product.objects.get(slug=pk)
        except:
            Http404()
    context = {
       'slug':slug,
       'products': products,
       'items': items
    }
    return render(request, 'product-details.html', context)

В настоящее время он работает нормально на любой другой странице, такой как индекс, магазин и страница товаров, но проблема появляется в корзине и оформлении заказа

Заменить

Http404()

To

raise Http404()

Я решил эту проблему с помощью preator и он/она указал, что я должен поставить cart и checkout перед динамическим url путем в файле url patterns.

path('cart/', views.cart, name='cart'),
path('checkout/', views.checkout, name='checkout'),
path('<str:pk>/', views.dynamic_product_view, name='productdetail'),

и он полностью работал нормально.

Просто добавляю как ответ вместо комментария:

Если вы работаете с динамической маршрутизацией URL, которая не имеет префикса, она соответствует всем URL, которые могут появиться на сайте. Django оценивает шаблоны в порядке их определения, поэтому динамический должен быть после всех специфических шаблонов, и тогда, когда checkout и cart не совпадают, динамический обработает их.

В вашем случае разместите динамический маршрут после маршрутов корзины и оформления заказа.

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