概述
简述
近期在写Django模块时,又碰到这个问题,花了些时间解决,这里汇总一下,最近这次异常出现后的分析思路。
具体情境
在测试用例报错
在测试用例中,解析地址时,下面的错误:
django.urls.exceptions.NoReverseMatch
其他的报错信息,都是说视图函数不对。
然后检查,发现是解析路径时有问题,我将reverse, resolve用混了。
reverse 是用来解析url的
resolve 是用来解析视图的
发现方式:这次是通过测试用例发现的。
解决办法:改正后就没有报错了。
小结:这种就需要仔细回忆近期有没有调用这两个方法解析地址,有的话建议检查一下是否有误。
模板页面取值时报错
空模型对象调用属性,报错:
django.urls.exceptions.NoReverseMatch: Reverse for 'topic_posts' with arguments '(3, '')' not found.
发现方式:这次是通过在模板的获取对象的地方设置断点,调试发现的。
解决办法:使用对象前判空
小结:需注意避免空指针,使用前判空以及对不确定的数据处理很重要。
模板中设置的跳转链接少了对象参数
正常使用没有任何问题,后面添加了类视图后,发现有个正常的地址解析不了了:
NoReverseMatch at /weekly/1/task/1/update
Reverse for 'weekly_preview' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['weekly/(?P<pk>[0-9]+)/preview/$']
分析:这一看就是少了参数,但是我没使用类视图时没有一点问题的地址,突然就不能反向解析了。
目前发现,将模板中,指向这个的链接给注释掉,就初步解决了这个问题,这样就不能共用了,这不是根本的办法。
进一步分析,可能是update 页面没有获取到weekly这个对象,这点可以从update页面显示结果看出来,然后设置断点调试一下,发现确实如此。
所以解决思路就是如何找到丢失的weekly,获取如何将weekly对象添加到update视图中
顺藤摸瓜,发现在update视图中,使用的model对象是Task,在编辑页面使用的是weekly,这就是问题所在
所以我这里的解决办法:
方案一:将这个链接按钮放其他页面
方案二:将update视图的model改为weekly
方案三:在update视图中,加入判断,如果没有weekly就不显示链接按钮,也就是第二种场景的使用前判空
小结:发现这种情况很多原因,主要就是少了参数,或者使用了空的对象。所以需要仔细检查与报错页面有关的模板内的链接,有关的视图函数是否少了参数。
读者可以尝试解决一下下面这个链接的问题,因为无法在这个网页注册,所以无法提供帮助:
https://www.cnpython.com/qa/110998#
我的分析结果是,他视图的edit函数,在GET请求时,返回的路径少了pk导致的:
else:
return render(request, 'pages/plan_edit.html', {'pk': post.pk})
或者他的plan_edit.html 模板页面使用了某个没有判空的对象,但是没有传入导致的。
记录一下,以后方便分析。
最后
以上就是动人芒果为你收集整理的django.urls.exceptions.NoReverseMatch 的几种情况简述具体情境的全部内容,希望文章能够帮你解决django.urls.exceptions.NoReverseMatch 的几种情况简述具体情境所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复