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

bha*_*ral 28 django

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

我试过了

{{ len(some_queryset) }}
Run Code Online (Sandbox Code Playgroud)

但那没用.格式是什么?

Eva*_*rim 55

{{ some_queryset.count }}一试.

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

  • 不一样!你应该确实使用长度,检查我的答案:http://stackoverflow.com/a/18578147/267719 (2认同)

Pre*_*eti 24

some_queryset.count(){{some_queryset.count}}在您的模板中.

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

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


Ale*_*oVD 8

只是为了突出@ Yuji'Tomita'Tomita评论作为一个单独的答案:

有一个叫做length调用len()任何东西的过滤器.

所以你可以使用:

{{ some_queryset|length }}
Run Code Online (Sandbox Code Playgroud)


And*_*röm 8

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

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

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

文档

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

尽管似乎已经使用prefetch_related()预先加载了相关对象,但是您可以安全地使用count(),并且Django将足够聪明来使用缓存的数据,而不用执行其他SELECT查询。