url-адреса не перекрываются — Как исправить

#django #django-urls

#django #django-urls

Вопрос:

Я пытаюсь фильтровать продукты либо по бренду, либо по категории, но путь URL будет выполняться только path('<slug:brand_slug>/', views.product_list,name='product_list_by_brand'), с тех пор, как он появится первым, и не будет выполнять второе.

Есть ли способ, которым я, вероятно, могу объединить оба пути или заставить оба пути работать независимо, не принимая во внимание порядок.

 from . import views

app_name = 'shop'

urlpatterns = [
    
    path('', views.product_list, name='product_list'),

    path('<slug:brand_slug>/', views.product_list,name='product_list_by_brand'),
    path('<slug:category_slug>/', views.product_list,name='product_list_by_category'),
] 
  

Заранее благодарю вас за ваш ответ.

Ответ №1:

проблема в том, что ваш верхний шаблон URL-адреса переопределяет второй URL-адрес из-за того же сбоя и некоторых других причин.

ИСПРАВИТЬ

измените шаблон URL

 path('<slug:brand_slug>/brand/', views.product_list,name='product_list_by_brand'),
path('<slug:category_slug>/', views.product_list,name='product_list_by_category'),
  

Еще одна вещь, которую вы можете сделать!

измените свою функцию и шаблон URL.

 def product_list(request, slug):
    mode = request.GET.get("mode")

    if mode.lower() == "brand":
        ''' your brand code '''
        pass
    else:
        ''' your category code '''
        pass
  
 path('<slug:slug>/', views.product_list,name='product_list_by_category'),
  

если вы хотите выполнить код бренда, ваш шаблон URL будет выглядеть следующим образом.

 127.0.0.1:8000/yourslug?mode=brand
  

и с помощью этого шаблона URL он будет выполнять код категории.

 127.0.0.1:8000/yourslug
  

поэтому по умолчанию он будет выполнять код категории.

Комментарии:

1. Большое вам спасибо за ваш ответ… Это сработало

2. @workkofy, если мой ответ вам полезен. вы должны принять мой ответ, это здорово для меня.

3. Спасибо @HamzaLachi