Django解决问题:
NoReverseMatch at /index/
Reverse for ‘index’ with arguments ‘(1,)’ not found. 1 pattern(s) tried: [‘index/$’]

这是在去除硬编码和添加命名空间时出现的错误,经过分析,由于标签{% url %}的工作方式是在myapp.urls中的模块URL定义中寻找具有指定名字的条目。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>人物列表</title>
</head>
<body>
<h1>人物介绍</h1>
<ul>
{% for person in person_list %}
<li><a href="{% url 'myapp:index' person.id %}">{{person.person_name}}---{{person.person_suggest}}</a></li>
{% endfor %}
</ul>
</body>
</html>
这是出错的person.html,其中<li><a href="{% url 'myapp:index' person.id %}">{{person.person_name}}---{{person.person_suggest}}</a></li>这是出错的语句,在href="{% url 'myapp:index' person.id %}"代码中,标签{% url %}会寻找myapp空间中的名为index,并且匹配person.id的url路径,下面我贴出,myapp命名空间中index和另一个函数detail的url定义路径:
path('', views.index, name='index'),
path('<int:num>/', views.detail, name='detail'),
在这里,"{% url 'myapp:index' person.id %}会在命名空间为myapp中寻找匹配person.id并且名为index的url路径,而我定义的url路径index中并没有匹配person.id的表达式,所以在访问index时会出现错误,显然,detail的url路径相当匹配,我们可将person.html中的出错语句:
<li><a href="{% url 'myapp:index' person.id %}">{{person.person_name}}---{{person.person_suggest}}</a></li>
修改为:
<li><a href="{% url 'myapp:detail' person.id %}">{{person.person_name}}---{{person.person_suggest}}</a></li>
此时:

浏览器运行成功了!

在Django中遇到NoReverseMatch错误,原因是{% url %}标签未能找到匹配的命名空间和参数。错误出现在person.html中,原本试图通过name='index'并传入person.id来获取URL,但实际的index路由未包含person.id参数。修正方法是将模板中的URL引用改为对应detail视图的正确参数,从而解决了问题。
251

被折叠的 条评论
为什么被折叠?



