Django渲染Model Form时触发NoReverseMatch URL反向解析错误
问题根源
你出现NoReverseMatch报错的直接原因是模板变量名写错:
你在viewSettings视图里传给模板的上下文变量是setting,但在HTML的form标签action属性中,你调用的是settings.pk,多了一个字母s,导致Django获取不到对应的主键值,只能拿到空字符串,和viewSettings路由要求的数字类型settings_pk匹配失败。
修复步骤
- 修正模板变量名
打开你的viewSetting.HTML,把form标签的代码改成:
<form method="POST" action="{% url 'viewSettings' setting.pk %}">
把settings.pk改为setting.pk即可解决渲染报错的问题。
- 排查提交后数据不保存的问题
你之前移除action属性后表单能渲染但提交无响应,本质是表单验证未通过,你没有在页面上打印错误提示所以看不到失败原因:
- 先在form标签下方添加错误输出代码,方便定位验证问题:
<form method="POST" action="{% url 'viewSettings' setting.pk %}"> {% csrf_token %} <!-- 新增错误提示代码 --> {% if form.errors %} <div class="alert alert-danger"> {{ form.errors }} </div> {% endif %} <!-- 原有表单代码 -->
- 最常见的验证失败原因是你模型里的
Complex字段设置了unique=True,如果提交的Complex值和数据库里已有记录重复,就会验证失败不会执行保存逻辑,修改对应字段值即可。
内容的提问来源于stack exchange,提问作者KyleStranger
相关产品推荐
相关产品推荐

