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

Django 2中NoReverseMatch错误求助:Edit_Product路由匹配失败

解决Django NoReverseMatch错误:Edit_Product路由缺少参数

我来帮你排查这个问题,从错误提示和你的代码来看,核心问题是调用Edit_Product路由时没有传递它必需的id参数,还有几处模板变量的小问题,下面一步步解决:

1. 修复detail.html中的编辑链接

在detail.html里,你生成编辑链接的代码没有传递产品id:

<a href="{% url "shop:Edit_Product" %}">Edit Product </a>

而你的路由path('shop/product/Edit_Product/<int:id>', ...)明确要求一个int类型的id参数,所以要改成:

<a href="{% url "shop:Edit_Product" product.id %}">Edit Product </a>

这样就能把当前产品的id传递给编辑视图了。

2. 修复Edit_Product.html中的表单action变量

在Edit_Product.html的form标签里,你写的是id=Product.id,但视图传递给模板的变量是小写的product(不是大写的Product),所以变量名错误,导致无法获取id:

<form action="{% url 'shop:Edit_Product' id=Product.id %}" method="POST" enctype="multipart/form-data">

改成小写的product.id:

<form action="{% url 'shop:Edit_Product' product.id %}" method="POST" enctype="multipart/form-data">

另外,其实表单的action可以留空(默认提交到当前URL),这样更简洁,也避免路由匹配错误:

<form method="POST" enctype="multipart/form-data">

3. 可选:完善路由的斜杠规范

虽然不是导致当前错误的直接原因,但建议给Edit_Product的路由末尾加上斜杠,符合Django的URL规范:

path('shop/product/Edit_Product/<int:id>/', views.Edit_Product, name='Edit_Product'),

额外优化建议

检查你的Edit_Product视图,当表单验证成功后,最好重定向到产品详情页或者编辑成功页面,而不是重新渲染编辑页面,这样更符合POST/REDIRECT/GET模式,避免重复提交:

from django.shortcuts import redirect

# 替换表单验证成功后的return语句
return redirect('shop:product_detail', id=product.id, slug=product.slug)

内容的提问来源于stack exchange,提问作者Malik Shahrah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:22:26