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

Django模板cart.html中href跳转上层/shop/shirts路由报错如何解决

Django路由反向解析报错解决方案

报错原因

你遇到的Reverse for 'shop' not found报错和路径层级无关,核心原因是Django模板的{% url %}标签是通过**路由命名(name属性)**匹配路径,不是通过URL前缀匹配:你的Django路由配置中没有命名为shop的路由条目,因此反向解析失败。

解决方案

方案1:使用命名路由(推荐)

该方案可维护性最高,后续修改URL路径只要保留name属性,模板代码无需调整。

  1. 先修改对应路由配置(通常为shop/urls.py),给目标路径添加name属性,示例配置:
# shop/urls.py
from django.urls import path
from . import views

# 若存在应用命名空间请记住对应名称
app_name = 'shop'

urlpatterns = [
    # 给/shop/shirts路径添加name属性
    path('shirts/', views.shirts_view, name='shirts'),
    # 其余原有路由保持不变
    path('cart/<int:id>/<str:size>/user', views.cart_view, name='cart'),
]
  1. 修改cart.html中的跳转代码:
  • 如果配置了app_name = 'shop'应用命名空间,写法为:
    <a href="{% url 'shop:shirts' %}">跳转到衬衫页面</a>
  • 如果未配置应用命名空间,写法为:
    <a href="{% url 'shirts' %}">跳转到衬衫页面</a>

方案2:硬写路径(临时应急)

如果不需要复用路由配置,可直接写路径实现跳转:

  • 绝对路径写法(最稳妥,从站点根路径开始匹配):
    <a href="/shop/shirts">跳转到衬衫页面</a>
  • 相对路径写法(从当前路径向上跳转3层):
    <a href="../../shirts">跳转到衬衫页面</a>

注意事项

写绝对路径时必须添加开头的/,如果省略/写为shop/shirts,路径会被自动拼接为当前页面的子路径,最终生成8000/shop/cart/6/M/user/shop/shirts的错误地址。


内容的提问来源于stack exchange,提问作者Omar Shokeir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:48:04