首页 > 解决方案 > 网址不重叠 - 如何修复

问题描述

我正在尝试按品牌或类别过滤产品,但 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'),
] 

预先感谢您的回复。

标签: djangodjango-urls

解决方案


问题是由于相同的 slug 和其他一些原因,您的上层 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'),

你可以做的另一件事!

修改您的功能和网址模式。

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

所以默认情况下它将执行类别代码。


推荐阅读