无法获取www.example.com中的URLurls.py来处理DJANGO项目

5vf7fwbs  于 2023-01-18  发布在  Go
关注(0)|答案(2)|浏览(130)

这是urls.py我Django项目主站点的www.example.com文件。我有一个类别表和一个国家表链接到产品表,但我不能让下面代码中的所有url都工作。如果我把category_detail url放在slug:category_slug〉/slug:slug/',product_detail url之后,这些url工作,而country_detail链接不工作。如果我把country_detail url放在slug:category_slug〉/slug:slug/',product_detail url之后,那么只有country_detail url工作。感谢任何帮助

from django.contrib import admin
from django.urls import path
from core.views import frontpage
from store.views import product_detail, category_detail,country_detail

urlpatterns = [
    path('', frontpage, name='frontpage'),
    path('admin/', admin.site.urls),
    path('<slug:category_slug>/<slug:slug>/', product_detail, name='product_detail'),
    path('<slug:slug>/', country_detail, name='country_detail'),
    path('<slug:slug>/', category_detail, name='category_detail'),```
oprakyz7

oprakyz71#

如果我把category_detail网址放在slug:category_slug〉/slug:slug/',product_detail网址之后,那么这些网址有效,而country_detail链接无效;如果我把country_detail网址放在slug:category_slug〉/slug:slug/',product_detail网址之后,那么只有country_detail网址有效。
这是因为Django会使用第一个匹配的路径,因为匹配国家和产品的规则是完全相同的,所以先匹配的就是匹配的。
要解决这个问题,您需要重新考虑API设计,并创建可以明确匹配的路由。
通常我们围绕“资源”和“集合”设计API,这意味着我们将有一个路由/products/,例如与集合交互,/products/1与特定的产品资源交互。
对于收集路径/products,我们可以添加传入查询参数的功能,以便使用类似/products?country=United+States的内容对类别或国家进行筛选(注意+是空间的URL编码版本)要在API端实现这一点,您需要从请求对象中获取查询参数,然后向查询集中添加一个过滤器,这里我不详细介绍,但你可以在谷歌上找到更多信息。
对于资源路由products/1,我们可能需要获取相关的对象,比如那个国家的类别,在这种情况下,我们将创建一个类似products/1/categories的路由,我将把实现视图的细节留给读者作为练习。

sigwle7e

sigwle7e2#

试试这个

urlpatterns = [
    path('', frontpage, name='frontpage'),
    path('admin/', admin.site.urls),
    path('product-detail/<slug:category_slug>/<slug:slug>/', product_detail, name='product_detail'),
    path('country-detail/<slug:slug>/', country_detail, name='country_detail'),
    path('category-detail/<slug:slug>/', category_detail, name='category_detail'),
]

相关问题