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
相关产品推荐
相关产品推荐

