You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django访问basket/路径触发404错误,疑与product_detail视图相关问题求助

解决访问/basket/时出现的404错误问题

看起来问题出在Django路由的匹配顺序上,而不是你的basket_summary视图本身。让我一步步拆解:

问题根源

Django在匹配URL时,会按照urlpatterns列表里的顺序从上到下检查。你的core/urls.py里先引入了main_store.urls,再引入basket.urls:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main_store.urls', namespace='main_store')),  # 先匹配这个
    path('basket/', include('basket.urls', namespace='basket')),  # 后匹配这个
]

如果你的main_store/urls.py里有一个类似这样的路由(用来匹配商品详情):

path('<slug>/', views.product_detail, name='product_detail')

那么当你访问/basket/时,Django会优先把basket当作<slug>参数,传递给product_detail视图。而你的product_detail视图用get_object_or_404(Product, slug=slug, in_stock=True)去查询商品,显然不存在slug为basket的商品,所以就触发了404错误——这就是你看到的问题,根本没走到basket_summary视图。

解决方案

你有两种简单的修复方式:

方案1:调整路由匹配顺序

把basket的路由放在main_store前面,这样Django会先匹配/basket/路径,再去处理main_store的路由:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('basket/', include('basket.urls', namespace='basket')),  # 移到前面
    path('', include('main_store.urls', namespace='main_store')),
]

方案2:给商品详情路由添加前缀

修改main_store/urls.py,给商品详情的路由加上明确的前缀(比如products/),避免和其他顶级路径冲突:

# main_store/urls.py
urlpatterns = [
    # 其他路由...
    path('products/<slug>/', views.product_detail, name='product_detail'),  # 添加前缀
]

这种方案更规范,能从根源上避免类似的路由冲突问题,推荐使用。

验证

修改后,访问/basket/应该就能正常进入购物车页面了,而商品详情页的访问路径会变成/products/[商品slug]/(如果用方案2的话)。

内容的提问来源于stack exchange,提问作者Delroy Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:24:05