Django点击编辑表单触发NoReverseMatch错误及排查
解决Django中NoReverseMatch错误:Reverse for 'editar_arvore' with arguments '('',)' not found
我一眼就看出问题出在模板变量的引用上,咱们来一步步捋清楚:
问题根源
你在ver_arvore.html的循环里犯了个变量名混淆的错误:
<td><a href="{%url 'arvore:editar_arvore' arvore.id %}"> {{ equipamentos.nome }}</a></td>
这里的arvore是视图传递过来的查询集/分页对象,它是一组数据的集合,根本没有id属性。而循环里的单个条目是equipamentos,这才是拥有id属性的单个Arvore实例。当你用arvore.id时,实际上传递了空值'',这就触发了路由匹配错误——因为editar_arvore路由要求必须传入一个整数类型的id参数。
修复步骤
只需要把模板里的变量名改对就行:
修改ver_arvore.html中的编辑链接代码:
<!-- 错误写法 --> <td><a href="{%url 'arvore:editar_arvore' arvore.id %}"> {{ equipamentos.nome }}</a></td> <!-- 正确写法 --> <td><a href="{%url 'arvore:editar_arvore' equipamentos.id %}"> {{ equipamentos.nome }}</a></td>
把arvore.id替换为equipamentos.id,这样就能正确传递当前循环条目的id值给编辑路由了。
额外验证
你的editar_arvore.html里的变量引用是正确的,因为在editar_arvore视图中,你传递的arvore是通过get_object_or_404获取的单个Arvore实例,它确实有id属性,所以那里的arvore.id没问题。
另外,你的ver_arvore视图逻辑是正常的,无论是分页还是搜索过滤,最终传递给模板的arvore都是合法的查询集,循环遍历也没问题,只是模板里的变量名用错了而已。
内容的提问来源于stack exchange,提问作者Alexandre das Neves Rodrigues
相关产品推荐
相关产品推荐

