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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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信息再次执行就成功解决了

猜你喜欢

转载自blog.csdn.net/qq_34579060/article/details/87804639