Django-NoReverseMatch

本文详细记录了一次在Django框架中遇到的反向解析错误的排查过程,通过逐步检查URL配置、视图函数及模板继承关系,最终发现是由于在基模板中未正确传递参数导致的错误。

版本:Django2.1 python3.6 CentOS6.8

错误提示:
Reverse for ‘list’ with arguments ‘(’’, 1)’ not found. 1 pattern(s) tried: [‘list/(?P<type_id>\d+)/(?P\d+)$’]
在这里插入图片描述

在这里插入图片描述
首先,看到这个错误,有点意外,这是反向解析错误,但看到地址栏那里已经是127.0.0.1:8000/goods/8,已经是正确跳转了,而且在这之前,我测试过这个view是没问题的。

这是我的URL配置:
在这里插入图片描述

可以肯定的是,第二项re_path配置是没问题的,因为在写listView之前就测试过了,就是写了listView之后再测试才出的问题,而且反向解析也是list的出错!但奇怪的是,我匹配listView()的url地址,是可以正常显示!

这是listView页面:
在这里插入图片描述

这说明listView的re_path也是正确的!

那么问题来了,错误提示是’list’的反向解析没找到,
在这里插入图片描述

而下面的提示又是指向detail.html
在这里插入图片描述

我查看了detail.html的代码,就没有找到关于list的反向解析语句!
使用反向解析的也就下面这句
在这里插入图片描述

好!上面是我遇到问题的过程!下面是解决问题的关键!!!
在这里插入图片描述

detail.html页面是继承base_detail_list.html的,问题就是出在这里!!我查看base_detail_list.html的语句,就是有下面这一句代码!
在这里插入图片描述

就是这句list反向解析错误!!把这个页面所有的这一句代码改为正向解析就可以了!
改为:href="/list/{{type.id}}/1"
在这里插入图片描述

以上方法是可以解决!但是博主我后来才发现,其实用反向解析也是可以的,是博主我自己粗心了!
我细心分析了一下错误提示,‘(‘’,1)’,很明显是第一个参数没有传入,我再查看了base_detail_list.html的程序,发现问题了
在这里插入图片描述
在下面发现了这个程序,这里传入的参数是type.id,然后在这里我并没有引入type参数,只是在上面的那段程序引入了,把type引入就正常了!!!
在这里插入图片描述

PS D:\python\pythonProject1> django-admin startproject django02 Traceback (most recent call last): File "D:\python\Anaconda\Scripts\django-admin-script.py", line 9, in <module> sys.exit(execute_from_command_line()) File "D:\python\Anaconda\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line utility.execute() File "D:\python\Anaconda\lib\site-packages\django\core\management\__init__.py", line 395, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "D:\python\Anaconda\lib\site-packages\django\core\management\base.py", line 330, in run_from_argv self.execute(*args, **cmd_options) File "D:\python\Anaconda\lib\site-packages\django\core\management\base.py", line 371, in execute output = self.handle(*args, **options) File "D:\python\Anaconda\lib\site-packages\django\core\management\commands\startproject.py", line 20, in handle super().handle('project', project_name, target, **options) File "D:\python\Anaconda\lib\site-packages\django\core\management\templates.py", line 114, in handle django.setup() File "D:\python\Anaconda\lib\site-packages\django\__init__.py", line 16, in setup from django.urls import set_script_prefix File "D:\python\Anaconda\lib\site-packages\django\urls\__init__.py", line 1, in <module> from .base import ( File "D:\python\Anaconda\lib\site-packages\django\urls\base.py", line 9, in <module> from .exceptions import NoReverseMatch, Resolver404 File "D:\python\Anaconda\lib\site-packages\django\urls\exceptions.py", line 1, in <module> from django.http import Http404 File "D:\python\Anaconda\lib\site-packages\django\http\__init__.py", line 5, in <module> from django.http.response import ( File "D:\python\Anaconda\lib\site-packages\django\http\response.py", line 15, in <module> from django.core.serializers.json import DjangoJSONEncoder File "D:\python\Anaconda\lib\site-packages\django\core\serializers\
最新发布
07-24
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值