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

use*_*539 2 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,
Run Code Online (Sandbox Code Playgroud)

这是模板代码中的限制:

{% for blog in blog|slice:"3" %}
Run Code Online (Sandbox Code Playgroud)

哪个选项最有利于性能。我怀疑views.py方法,但我希望我的怀疑得到有真正知识的人的支持。

谢谢。

Mau*_*zar 5

正如 @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" %}
Run Code Online (Sandbox Code Playgroud)

与使用相同SELECT * FROM Customers LIMIT 3;