Django表单action用{% url 'edit' %}出现NoReverseMatch错误原因咨询
问题原因及解决办法
核心原因
你的edit路由定义包含必需的title参数,但模板中使用{% url 'edit' %}时没有传递该参数,导致Django无法反向解析出合法的URL,从而抛出NoReverseMatch错误。
具体分析
- 从
urls.py的配置来看,edit路由明确要求接收一个字符串类型的title参数:
path("wiki/<str:title>/edit", views.edit, name="edit")
Django的反向URL解析需要你提供这个参数,才能生成类似/wiki/CSS/edit这样的具体URL。
模板里的
{% url 'edit' %}只指定了路由名称,没有传递title参数,Django不知道要为哪个条目生成编辑页面的提交地址,自然无法完成解析。移除
action属性后表单能正常工作,是因为表单默认会将数据提交到当前页面的URL(也就是你打开的/wiki/CSS/edit),这个URL本身已经包含了title参数,POST请求能被edit视图正确接收处理。
解决方法
有两种可行的修正方式:
- 方式一:在url标签中传递title参数
修改模板里的表单action部分,补充title参数:
<form action="{% url 'edit' title=title %}" method="post"> {% csrf_token %} <textarea id="ctnt" name="content">{{ge}}</textarea> <br> <input type="submit" value="Submit"> </form>
这样Django就能正确生成带对应title的提交URL。
- 方式二:保留无action的写法
如果当前页面的URL就是正确的提交地址,直接省略action属性是完全没问题的,表单会自动提交到当前页面,这种写法更简洁。
内容的提问来源于stack exchange,提问作者usgar
相关产品推荐
相关产品推荐

