我是靠谱客的博主 自然白昼,最近开发中收集的这篇文章主要介绍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...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部