版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34579060/article/details/87804639
在使用django form表单出现以下错误
django.urls.exceptions.NoReverseMatch: Reverse for 'new_entry' with arguments '('',)'
not found. 1 pattern(s) tried: ['new_entry/(?P<topic_id>\\d+)/$']
功能描述:
想给“指定主题”添加内容实体
请求地址:
http://localhost:8000/new_entry/2
urls:
# 添加新条目
url(r'^new_entry/(?P<topic_id>\d+)/$', views.new_entry, name='new_entry'),
定义view:
def new_entry(request, topic_id):
'''在特定的主题中添加条目'''
topic = Topic.objects.get(id=topic_id)
if request.method != 'POST':
form = EntryForm()
else:
# 新增主题内容条目
form = EntryForm(data=request.POST)
if form.is_valid():
context = {'form': form}
# 跳转到新增展示界面
return render(request, 'learning_logs/new_entry.html', context)
模板 new_entry.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>新增内容</title>
</head>
<body>
<!-- 继承主页链接 -->
{% extends "learning_logs/base.html" %}
{% block content %}
<p> Add a new entry:</p>
<!-- 添加一个内容 -->
<form action="{% url 'learning_logs:new_entry' topic.id %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="add entry">
</form>
{% endblock %}
</form>
</body>
</html>
问题定位经过:
在将模板 <form></form> 表单注释掉之后,发现可以跳转到界面,那么问题可以确定在 form标签包括之内的原因了,debug调试后,view内定义的
new_entry(request, topic_id) 是可以接收浏览器传入的 topic_id。因为是get 请求所以应该直接跳转到新增实体界面。 但是报错,所以问题应该只是在模板html的表单内了。
最终发现:
因为是给指定主题添加内容, 所以需要 topic_id
而此时context之中并没有包含 topic的信息
所以修改view中 new_entry
增加 topic信息再次执行就成功解决了