当前位置: 代码迷 >> 综合 >> python django Reverse for 'new_entry' with arguments '('',)' not found.
  详细解决方案

python django Reverse for 'new_entry' with arguments '('',)' not found.

热度:79   发布时间:2023-10-08 19:19:29.0

在使用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内定义的

python django Reverse for 'new_entry' with arguments '('',)' not found.

new_entry(request, topic_id) 是可以接收浏览器传入的 topic_id。因为是get 请求所以应该直接跳转到新增实体界面。 但是报错,所以问题应该只是在模板html的表单内了。

最终发现: 

     因为是给指定主题添加内容, 所以需要 topic_id

     python django Reverse for 'new_entry' with arguments '('',)' not found.

    而此时context之中并没有包含 topic的信息

    python django Reverse for 'new_entry' with arguments '('',)' not found.

   所以修改view中 new_entry

   python django Reverse for 'new_entry' with arguments '('',)' not found.

 增加 topic信息再次执行就成功解决了

  相关解决方案