Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django-在模板中显示查询集的长度_Django - Fatal编程技术网

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

django-在模板中显示查询集的长度,django,Django,在html文件中,如何输出正在使用的查询集的大小(用于调试目的) 我试过了 {{ len(some_queryset) }} 但那没用。格式是什么?尝试一下{{some_queryset.count} 这比使用len(可以通过{some\u queryset.\uu len\uqueryset}调用len)要好,因为它优化了后台生成的SQL,只检索记录的数量,而不是记录本身。模板中的some\u queryset.count()或{some\u queryset.count} 不要使用len,

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

我试过了

{{ len(some_queryset) }}

但那没用。格式是什么?

尝试一下
{{some_queryset.count}

这比使用len(可以通过
{some\u queryset.\uu len\uqueryset}
调用len)要好,因为它优化了后台生成的SQL,只检索记录的数量,而不是记录本身。

模板中的some\u queryset.count()
{some\u queryset.count}

不要使用
len
,它的效率要低得多。数据库应该正在做这项工作。请参阅有关的文档


然而,考虑到buffer的建议,如果您计划无论如何迭代记录,您最好使用
len
,这将涉及解析查询集并使生成的行驻留在主内存中-这不会浪费时间,因为您无论如何都会访问这些行。根据数据库连接延迟的不同,它实际上可能更快,但您应该始终进行测量。

只需突出上面的@Yuji'Tomita'Tomita comment作为一个单独的答案:


有一个名为
length
的过滤器可以对任何对象调用
len()

因此,您可以使用:

{{ some_queryset|length }}

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

如果查询集仅用于计算行数,请使用count()

如果查询集在其他地方使用,即在循环中使用,请使用len()或| length。这里使用count()将发出另一个SELECT查询来计算行数,而len()只计算查询集中缓存结果的数量

从:

请注意,如果您想要查询集中的项数,并且还从中检索模型实例(例如,通过对其进行迭代),那么使用len(QuerySet)可能会更有效,因为len(QuerySet)不会像count()那样导致额外的数据库查询


虽然似乎对于已经使用prefetch_related()加载的相关对象,您可以安全地使用count(),Django将足够聪明地使用缓存的数据,而不是执行另一个SELECT查询。

有一个名为
length
的过滤器,可以对任何对象调用len()<代码>{any|iterable|length}
@Yuji'Tomita'Tomita所以你用了
一些查询集。全部| length
?就生成的SQL而言,这是最优的吗?
some\u queryset.count
使用
SELECT count(*)
。。。而不是选择所有模型字段。我不知道这在性能方面有多重要,我想对于具有大型查询集的东西来说,这可能很重要?@AJP是的。如果您只获得计数,那么请执行一些\u queryset.count。如果已经对其进行了评估,| length可以为您节省db命中率。谢谢@Yuji'Tomita'Tomita'Tomita过滤器的“length”如何?是一样的吗?不一样!您确实应该使用length,检查我的答案:到目前为止,django不允许在模板中使用
\uuu len\uuuu
。仅供参考,每次连续调用模板中的
{some_queryset.count}
,都将发出另一个DB调用。如果这是一个会多次显示的值,请将该值存储在视图中并传递给模板。
不要使用len,它的效率要低得多。
:除非您仍要迭代查询集。在这种情况下,宁愿选择
len
而不是
count