在模板或视图中限制django for循环以获得更好的性能?

时间:2017-10-18 22:38:59

标签: python django django-templates django-views

我的模板上有一个for循环。我只想在博客循环中显示前3项。

目前只有20个博客条目,但如果博客条目说500或更多,从性能角度来看,最好是在views.py代码或模板代码中限制循环吗?

这是views.py文件中的循环限制:

blog_latest_entries = BlogDetails.objects.filter(blog_date_published__lte=date_now).order_by('-blog_date_published')[:3]
.....
return render(request, 'page.html', {
    'blog': blog_details_latest_entries,

以下是模板代码中的限制:

{% for blog in blog|slice:"3" %}

哪种选择最适合表现。我怀疑是views.py的方法,但我希望我的怀疑得到有真正知识的人的支持。

感谢。

1 个答案:

答案 0 :(得分:3)

as @hansTheFranz表示Django查询集是懒惰的。这意味着只有在您要求时才会查询数据库。

因此,在您的模板询问结果之前,它不会执行查询。所以,是的,你可以使用:

blog_latest_entries = BlogDetails.objects.filter(blog_date_published__lte=date_now).order_by('-blog_date_published')
{% for new in news|slice:":10" %}

与使用SELECT * FROM Customers LIMIT 3;

相同