Reverse for '**' with arguments '('',)' not found. 1 pattern(s) tried(topic_id与topic.id)

最近在学习《python 从入门到精通》第19章,进行环境搭建时出现了一个错误,python 版本:3.7.4,django 版本:2.2.5

NoReverseMatch at /new_entry/2

Reverse for 'topic' with arguments '('',)' not found. 1 pattern(s) tried: ['topic/(?P[0-9]+)$'],截图如下:

Reverse for '**' with arguments '('',)' not found. 1 pattern(s) tried(topic_id与topic.id)_第1张图片

错误里显示找不到带有"(")"参数的topic,尝试使用'topic/'来匹配。虽然图中显示报错在base.html,但此错误还是出现在new_entry.html,其源码如下:

{% extends "learning_logs/base.html" %}
{%block content %}

    

{{ topic }}

    

Add a new entry:


    
    

        {% csrf_token %}
        {{ form.as_p }}
        
    

    
{% endblock content %}

其中第4行使用到了topic_id,第8行使用的topic.id(已标红),使用topic_id的视图分别是topic和new_entry视图,topic_id是两个视图里面的形参。出现此错误的原因是一是在new_entry视图里未传送topic_id,导致topic_id被认为是无效参数,二是使用topic.id自动识别ID参数(在topic视图和new_entry视图里,topic=Topic.objects.get(id=topic_id))。所以解决方法有两个

(1)修改new_entry视图,将topic_id参数传过来,即将context={'topic':topic,'form':form}修改为context={'topic':topic,'form':form,'topic_id':topic_id},render函数保持不变

(2)修改第4行topic_id为topic.id 。此是书中的写法

 

你可能感兴趣的:(python,web,python,django,web)