Django编写视图

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

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>

此时:
在这里插入图片描述
浏览器运行成功了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值