django - показывает длину набора запросов в шаблоне

В моем HTML-файле, как я могу вывести размер набора запросов, который я использую (для моих целей отладки)

Я пытался

{{ len(some_queryset) }}

но это не сработало. Какой формат?

 Yuji 'Tomita' Tomita22 мая 2012 г., 06:29
Есть фильтр под названиемlength вызывать len () на что угодно.{{ any_iterable|length }}
 Yuji 'Tomita' Tomita25 мар. 2013 г., 23:48
@ AJP да. Если вы получаете ТОЛЬКО счетчик, то сделайте some_queryset.count. Если он уже оценен, длина может сэкономить вам удар в дБ.
 AJP25 мар. 2013 г., 23:50
Спасибо @ Yuji 'Tomita' Tomita
 AJP25 мар. 2013 г., 23:46
@ Yuji 'Tomita' Tomita, так что для этого вы использовалиsome_queryset.all|length ? Является ли это оптимальным с точки зрения генерируемого SQL?some_queryset.count использованияSELECT COUNT(*)... вместо выбора всех полей модели. Я не знаю, насколько это важно с точки зрения производительности, я думаю, что для чего-то с большим набором запросов это может быть значительным?

Ответы на вопрос(4)

Принятый ответ не совсем корректен. Следует ли вам использовать len () (или фильтр длины в шаблоне) против count (), зависит от вашего варианта использования.

ЕслиQuerySet only exists to count the amount of rows, используйте count ().

ЕслиQuerySet is used elsewhereто есть в цикле используйте len () или | length. Использование count () здесь вызовет другой SELECT-запрос для подсчета строк, в то время как len () просто подсчитывает количество кэшированных результатов в QuerySet.

Отдокументы:

Note that if you want the number of items in a QuerySet and are also retrieving model instances from it (for example, by iterating over it), it’s probably more efficient to use len(queryset) which won’t cause an extra database query like count() would.

Хотя кажется, что со связанными объектами, которые вы уже загружали с помощью prefetch_related (), вы можете безопасно использовать count (), и Django будет достаточно умен, чтобы использовать кэшированные данные вместо выполнения другого SELECT-запроса.

Решение Вопроса

Дать{{ some_queryset.count }} попытка

Это лучше, чем использовать len (который может быть вызван с{{ some_queryset.__len__ }}), потому что оптимизирует SQL, сгенерированный в фоновом режиме, чтобы получать только количество записей вместо самих записей.

 10 окт. 2017 г., 16:38
.count () работал на меня
 01 дек. 2016 г., 21:26
на данный момент джанго не позволяет__len__ в шаблонах.
 02 сент. 2013 г., 19:21
не такой же! Вы действительно должны использовать длину, проверьте мой ответ:stackoverflow.com/a/18578147/267719
 22 мая 2012 г., 20:23
Как насчет фильтра "длина"? Это то же самое?docs.djangoproject.com/en/dev/ref/templates/builtins/#length

some_queryset.count() или же{{some_queryset.count}} в вашем шаблоне.

не использоватьlen, это гораздо менее эффективно. База данных должна делать эту работу. Смотрите документацию оcount().

Однако, принимая во внимание рекомендации буфера, если вы все равно планируете перебирать записи, вы также можете использоватьlen который будет включать в себя разрешение набора запросов и размещение результирующих строк в основной памяти - это не пропадет, потому что вы все равно будете посещать эти строки. На самом деле это может быть быстрее, в зависимости от задержки соединения с БД, но вы всегда должны измерять.

 25 окт. 2014 г., 16:31
dont use len, it is much less efficient : True, если вы все равно не собираетесь перебирать свой набор запросов. В этом случае предпочитаюlen надcount. Read More

Просто, чтобы выделить @ Yuji 'Tomita' Tomita, комментарий выше, в качестве отдельного ответа:

There is a filter called length to call len() on anything.

Таким образом, вы можете использовать:

{{ some_queryset|length }}

Ваш ответ на вопрос