Django NoReverseMatch错误:updatekwalificatie路由反向解析失败求助
错误根因
你模板中的迭代变量和传参变量名不匹配:for循环定义的迭代变量是i,但反向解析updatekwalificatie路由时使用了未定义的kwalificatie.id,该变量取值为空字符串,和路由要求的非空pk参数规则不匹配,因此抛出NoReverseMatch异常。
修复方案
1. 核心修复(必做)
修改模板中反向解析的传参,将不存在的kwalificatie.id替换为循环迭代变量i.id:
<td><a class="btn btn-sm btn-outline-secondary" href="{% url 'updatekwalificatie' i.id %}">Update</a></td>
2. 可选优化项
- 路由参数类型调整:将
pk的类型从str改为int,匹配数据库ID的数字属性,避免非法字符参数传入视图:
# urls.py path('updateKwalificatie/<int:pk>/', views.updateKwalificatie, name='updatekwalificatie'),
- 视图异常兜底:用
get_object_or_404替代直接get查询,避免传入不存在的ID时抛出服务端错误:
# views.py from django.shortcuts import get_object_or_404 def updateKwalificatie (request, pk): kwalificatie = get_object_or_404(Kwalificaties, id=pk) form = kwalificatie_beheer(instance=kwalificatie) context = {'form': form} return render(request,'accounts/kwalificatiebeheer.html', context)
- 变量名语义化优化:将循环迭代变量从无意义的
i改为kwalificatie,降低后续代码维护的出错概率:
{% for kwalificatie in kwalificaties %} <tr> <td>{{kwalificatie.naam}}</td> <td>{{kwalificatie.ehbo}}</td> <td>{{kwalificatie.treinen}}</td> <td>{{kwalificatie.extra}}</td> <td><a class="btn btn-sm btn-outline-secondary" href="{% url 'updatekwalificatie' kwalificatie.id %}">Update</a></td> <td><input type="submit" value="Verwijder"></td> </tr> {% endfor %}
内容的提问来源于stack exchange,提问作者UGC61
相关产品推荐
相关产品推荐

