Django新增带<int:id>路由后触发NoReverseMatch错误如何解决?
错误修复方案
报错根因
你遇到的NoReverseMatch错误,核心原因是register_visit路由定义中要求传入<int:id>参数,但你在模板中调用{% url 'register_visit' %}反向解析路由时没有传递该参数,Django无法匹配到符合规则的路由,因此抛出异常。
具体修复步骤
1. 修复详情页的跳转按钮代码
你之前将id参数拼接在{% url %}标签外的写法是错误的,参数需要直接传入url标签:
把detail_patient.html中的原有代码:
<a href="{% url 'register_visit' %}{{patients.id}}" class="btn btn-primary">Nouvelle Chirurgie</a>
修改为:
<a href="{% url 'register_visit' id=patients.id %}" class="btn btn-primary">Nouvelle Chirurgie</a>
修改后Django会自动将id参数填充到路由的对应位置,生成规范的/register_visit/xxx/格式链接。
2. 优化路由与首页跳转代码(可选但强烈建议)
你目前的第5条detail_patient路由没有配置name属性,且首页Details按钮用硬编码路径的写法容易在后续路由调整时出问题,建议同步修改:
- 首先给
cabinet/urls.py中的detail_patient路由添加name属性:urlpatterns = [ path('', views.index, name='index'), path('register_patient/', views.registerPatient,name='register_patient'), path('register_booking/', views.registerBooking,name='register_booking'), path('register_visit/<int:id>/', views.registerVisit,name='register_visit'), path('<int:id>/', views.detail_patient, name='detail_patient'), # 新增name属性 ] - 再修改
index.html中的Details按钮代码,用反向解析生成链接:
后续就算调整路由规则,只要<a href="{% url 'detail_patient' id=field.id %}" class="btn btn-warning">Details</a>name属性不变,模板代码不需要修改,可维护性更高。
内容的提问来源于stack exchange,提问作者Akram Baklouti
相关产品推荐
相关产品推荐

