Django 3.2添加删除按钮出现NoReverseMatch反向匹配错误如何解决?
错误原因
你触发NoReverseMatch的核心问题是路由语法混用:url()是Django中正则路由的写法(等价于re_path()),不识别path()专属的<str:id>路径转换器语法,导致Django无法匹配你传入的id参数。同时删除视图也存在逻辑错误。
修复步骤
1. 修正应用层urls.py
将删除路由改为path()写法,适配路径转换器语法,同时添加尾部斜杠符合Django路由规范,id用int类型适配数据库自增主键:
from django.urls import path from . import views urlpatterns=[ path('', views.home, name='home'), path('delete/<int:id>/', views.delete_data, name='deldata'), ]
2. 修正views.py的删除逻辑
删除完成后应该跳转回首页,不要重复跳转删除路由,同时用get_object_or_404优化不存在数据的异常处理:
def delete_data(request, id ): ggwp = get_object_or_404(value, id=id) if request.method == "POST": ggwp.delete() return redirect('home') # 不需要单独的删除确认页的话可以直接跳回首页,不需要后续render逻辑 return redirect('home')
可选优化
- 首页添加任务的表单action改为规范写法,避免路径错误:
<form method="POST" action="{% url 'home' %}">
- 模型类名建议遵循Python大驼峰规范,将
value改为Value提升代码可读性。
内容的提问来源于stack exchange,提问作者Roshan Gautam
相关产品推荐
相关产品推荐

