Django中company_delete路由反向匹配失败及500错误排查求助
解决Django的
NoReverseMatch与500错误 嘿,我来帮你搞定这个问题!你遇到的django.urls.exceptions.NoReverseMatch错误,本质是在生成company_delete的URL时传了空的pk参数(错误提示里的('',)就是证据),Django找不到对应的路由,进而触发了500服务器错误。结合你的代码,问题主要出在两个地方:
一、删除模板的变量名用错了
看你的company_delete.html模板,里面写了{% url 'company_delete' c.pk %},但回头看views.py的company_delete视图:
else: context = {'company': company} data['html_form'] = render_to_string('company_delete.html',context,request=request)
这里传递给删除模板的上下文变量是company,不是c!c是company_list_2.html里循环遍历公司列表的变量,在删除模板里根本不存在,所以c.pk会返回空值,直接导致反向匹配失败。
而且模板里的{{ c.name }}也会有同样的问题,删除确认框里的公司名称会显示为空。
二、URL配置里的转义字符坑
你的urls.py里的路由写了(?P<pk>\d+),这明显是HTML转义后的结果(<变成了<,>变成了>),Django根本解析不了这个参数,这也是反向匹配失败的潜在原因。
解决方案
1. 修复company_delete.html的变量名
把模板里所有的c替换成company,修改后代码如下:
{% load crispy_forms_tags %} <form method="post" data-url="{% url 'company_delete' company.pk %}" class="delete-form"> {% csrf_token %} <div class="modal-header"> <h3 class="modal-title">Delete Company</h3> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <p class="lead">Are you sure you want to delete this company <strong>{{ company.name }}</strong>?</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="submit" class="btn btn-danger">Delete Company</button> </div> </form>
2. 修正urls.py的路由转义问题
把所有<和>替换成正常的<和>,修改后的urlpatterns:
urlpatterns = [ url(r'^company/$', views.company_list, name='company_list'), url(r'^company/create/$', views.company_create, name='company_create'), url(r'^company/(?P<pk>\d+)/update/$', views.company_update, name='company_update'), url(r'^company/(?P<pk>\d+)/delete/$', views.company_delete, name='company_delete'), ]
3. 额外验证点
- 确认你的
Company模型主键是pk(Django默认会自动生成id作为主键,pk是它的别名,所以一般没问题,除非你自定义了主键字段)。 - 检查
company_list_2.html里的{% url 'company_delete' c.pk %}是正常的,这里的c是循环变量,有有效的pk值,不用改。
做完这些修改后,重启你的Django开发服务器,再试试删除功能,应该就能正常工作了!
内容的提问来源于stack exchange,提问作者mtr khan
相关产品推荐
相关产品推荐

