我是靠谱客的博主 自然白昼,最近开发中收集的这篇文章主要介绍Django项目学习踩坑之django.urls.exceptions.NoReverseMatch: Reverse for...,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
在Django项目学习使用elasticsearch中,遇到了这样一个问题。报错:
django.urls.exceptions.NoReverseMatch: Reverse for...
这个错误,其实是对应的html语句引用url找不到对应的路由导致的,可能是url.py写错,也可能是在模板中的a标签没有获取到正确的参数、无法组成正确的url。
比如:
# 使用关联查询
news1 = models.HotNews.objects.select_related("news").only(
"news_id", "news__title", "news__image_url"
).filter(is_delete=False).order_by("priority")
for i in news:print(1)
这之中,每一个i都是HotNews对象。
通过debug模式,可以看到,它返回的数据类型是:
i: {
...,
"id": ..,
"news_id": ..,
"priority": ..,
news:{
...,
#这里的内容是关联查询到news表里面才有的字段的内容
},
}
而在html文件中:
<a href="{% url 'news:news_detail' one_hotnews.news.id %}">{{ one_hotnews.title }}</a>
<p class="news-details">{{ one_hotnews.news.digest }}</p>
<span class="news-type">{{ one_hotnews.news.tag.name }}</span>
这是可以正常获取到的。
而把查询语句改成:
news = models.News.objects.only("title", "image_url", "digest").filter(
is_delete=False).order_by("-clicks")
同样的方法,得到的数据结构是:
i: {
...,
"id": ..,
"news_id": ..,
"priority": ..,
#这里的内容是news表里面有的字段的内容
}
如果上述的html文件内容不变的话
<a href="{% url 'news:news_detail' one_hotnews.news.id %}">{{ one_hotnews.title }}</a>
<p class="news-details">{{ one_hotnews.news.digest }}</p>
<span class="news-type">{{ one_hotnews.news.tag.name }}</span>
是什么都获取不到的,所以url命名空间会报错。
这时需要改成:
<a href="{% url 'news:news_detail' one_hotnews.id %}">{{ one_hotnews.title }}</a>
<p class="news-details">{{ one_hotnews.digest }}</p>
<span class="news-type">{{ one_hotnews.tag.name }}</span>
注意:另外需要注意的是:使用关联查询的时候,如果只是用select_related而没有查询关联表的字段的话,一样会报错的。
最后
以上就是自然白昼为你收集整理的Django项目学习踩坑之django.urls.exceptions.NoReverseMatch: Reverse for...的全部内容,希望文章能够帮你解决Django项目学习踩坑之django.urls.exceptions.NoReverseMatch: Reverse for...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复