Django传递productid实现商品详情展示时触发noReverseMatch错误
触发NoReverseMatch错误的问题定位
结合你提供的代码片段,有两处直接违反Python和Django语法规则的错误,会直接导致路由加载失败、反向匹配异常:
- URL路径字符串引号未正确闭合,参数解析错位
你写的路由配置中,路径开头的单引号从product/前方启动,直到name=后方才出现下一个单引号,直接把product/<int:id>/, views.product-details, name=整段内容都当作了路由路径字符串,后续的product-details')属于语法无效内容。这种情况下Django根本无法正常注册名为product-details的路由条目,反向解析时自然会抛出NoReverseMatch错误。 - 视图引用写法不符合Python语法要求
你对视图的引用写为views.product-details,Python语法不允许函数名、模块属性名中使用连字符-,解释器会将这段代码解析为“取views下的product属性值减去details变量”,属于直接的语法错误,会阻断整个URL配置的加载流程。
修正后的参考写法
可正常运行的路由配置为:path('product/<int:id>/', views.product_details, name='product-details')
调整完成后,模板中{% url 'product-details' product.id %} 的位置传参写法,是可以正常按路由参数顺序匹配,生成指向对应商品详情页、传递商品id参数的URL的。
补充说明:如果你的项目为各应用配置了命名空间,模板内调用反向路由时需要带上命名空间前缀(如
{% url 'your_app_namespace:product-details' product.id %}),否则也会触发同类反向匹配错误。但从你当前给出的代码片段来看,前面两处语法错误已经足够触发页面报错。
内容的提问来源于stack exchange,提问作者Victor02
相关产品推荐
相关产品推荐

