在我的 html 文件中,如何输出我正在使用的查询集的大小(出于调试目的)
我试过了
{{ len(some_queryset) }}
但这没有用。格式是什么?
试一试{{ some_queryset.count }}
。
这比使用 len (可以用 调用{{ some_queryset.__len__ }}
)要好,因为它优化了后台生成的 SQL,只检索记录的数量而不是记录本身。
some_queryset.count()
或{{some_queryset.count}}
在您的模板中。
不要使用len
,效率要低得多。数据库应该做这项工作。请参阅有关count()
.
但是,考虑到缓冲区的建议,如果您打算无论如何都要遍历记录,您不妨使用len
这将涉及解析查询集并使结果行驻留在主内存中 - 这不会浪费,因为您将访问这些反正行。它实际上可能更快,具体取决于数据库连接延迟,但您应该始终测量。
接受的答案并不完全正确。您是否应该使用 len() (或模板中的长度过滤器)与 count() 取决于您的用例。
如果QuerySet 仅用于计算行数,请使用 count()。
如果QuerySet 在别处使用,即在循环中,使用 len() 或 |length。在这里使用 count() 将发出另一个 SELECT 查询来计算行数,而 len() 只是计算 QuerySet 中缓存结果的数量。
从文档:
请注意,如果您想要 QuerySet 中的项目数并且还从中检索模型实例(例如,通过迭代它),使用 len(queryset) 可能更有效,它不会导致额外的数据库查询,例如count() 会。
尽管您似乎已经使用 prefetch_related() 预先加载了相关对象,但您可以安全地使用 count() 并且 Django 将足够聪明地使用缓存数据而不是执行另一个 SELECT 查询。
只是为了突出上面的@Yuji'Tomita'Tomita 评论作为单独的答案:
有一个过滤器
length
可以调用len()
任何东西。
所以你可以使用:
{{ some_queryset|length }}
虽然我试图用 Django(3.8.3)显示追随者的数量,但我解决了“计数”问题。
<p>{{profile.following.count}}</p>