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而没有查询关联表的字段的话,一样会报错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值