django - 显示模板中查询集的长度

时间:2012-05-22 03:22:27

标签: django

在我的html文件中,如何输出我正在使用的查询集的大小(用于我的调试目的)

我试过

{{ len(some_queryset) }}

但这不起作用。格式是什么?

5 个答案:

答案 0 :(得分:50)

尝试{{ some_queryset.count }}

这比使用len(可以使用{{ some_queryset.__len__ }}调用)更好,因为它优化了后台生成的SQL,只检索记录数而不是记录本身。

答案 1 :(得分:23)

some_queryset.count()或模板中的{{some_queryset.count}}

不要使用len,效率要低得多。数据库应该做这项工作。请参阅有关count()

的文档

但是,考虑到缓冲区的建议,如果你打算迭代记录,你也可以使用len,这将涉及解析查询集并使得结果行驻留在主内存中 - 这不会去浪费,因为无论如何你会访问这些行。它可能实际上更快,取决于数据库连接延迟,但您应该始终测量。

答案 2 :(得分:8)

将上面的@ Yuji'Tomita'Tomita评论作为一个单独的答案强调:

  

有一个名为length的过滤器可以在任何内容上调用len()

所以你可以使用:

{{ some_queryset|length }}

答案 3 :(得分:3)

接受的答案并不完全正确。是否应该使用len()(或模板中的长度过滤器)vs count()取决于您的用例。

如果 QuerySet仅用于计算行数,请使用count()。

如果 QuerySet用于其他地方,即在循环中,请使用len()或长度。在这里使用count()会发出另一个SELECT查询来对行进行计数,而len()只是对QuerySet中的缓存结果进行计数。

来自docs

  

请注意,如果您想要QuerySet中的项目数并且还从中检索模型实例(例如,通过对其进行迭代),则使用len(queryset)可能会更有效,这不会造成额外的负担像count()这样的数据库查询。

尽管看来,对于已经使用prefetch_related()急切加载的相关对象,您可以安全地使用count(),并且Django足够聪明,可以使用缓存的数据,而不必执行其他SELECT查询。

答案 4 :(得分:-1)

虽然我试图用 Django (3.8.3) 显示关注者的数量,但我解决了“计数”。

 <p>{{profile.following.count}}</p>