2012-05-22 12 views
20

En mi archivo html, ¿cómo puedo emitir el tamaño del conjunto de consultas que estoy usando (para mis propósitos de depuración)Django - mostrar la longitud de un conjunto de consultas en una plantilla

He intentado

{{ len(some_queryset) }} 

pero eso no funcionó. ¿Cuál es el formato?

+2

hay un filtro llamado 'length' llamar len() en cualquier cosa. '{{any_iterable | length}}' –

+1

@ Yuji'Tomita'Tomita así que para esto habías usado 'some_queryset.all | length'? ¿Es esto óptimo en términos del SQL generado? El 'some_queryset.count' usa' SELECT COUNT (*) '... en lugar de seleccionar todos los campos del modelo. No sé cuán significativo es esto en términos de rendimiento, supongo que para algo con un gran conjunto de consultas esto podría ser significativo. – AJP

+2

@AJP sí. Si SOLO obtiene el conteo, entonces haga un cierto número de cuentas. Si ya está evaluado de todos modos, | length podría ahorrarle un hit de db. –

Respuesta

41

Prueba {{ some_queryset.count }} para probar.

Esto es mejor que usar len (que se puede invocar con {{ some_queryset.__len__ }}) porque optimiza el SQL generado en segundo plano para recuperar solo el número de registros en lugar de los propios registros.

+0

¿Qué tal el filtro "longitud"? ¿Es lo mismo? https://docs.djangoproject.com/en/dev/ref/templates/builtins/#length – dannyroa

+1

¡No es lo mismo! de hecho debes usar la longitud, revisa mi respuesta: http://stackoverflow.com/a/18578147/267719 – daveoncode

+1

a partir de ahora django no permite '__len__' en las plantillas. – mehmet

19

some_queryset.count() o {{some_queryset.count}} en su plantilla.

no use len, es mucho menos eficiente. La base de datos debería estar haciendo ese trabajo. Consulte la documentación sobre count().

Sin embargo, teniendo en cuenta los consejos de búfer, si planea iterar sobre los registros, también puede usar len que implicará resolver el conjunto de consulta y hacer que las filas resultantes residan en la memoria principal. Esto no se desperdiciará porque de todos modos visitarás estas filas. En realidad, podría ser más rápido, dependiendo de la latencia de la conexión db, pero siempre debe medir.

+0

'no use len, es mucho menos eficiente': ​​cierto, a menos que vaya a iterar sobre su queryset de todos modos. En ese caso, prefiera 'len' sobre' count'. [Leer más] (http://stackoverflow.com/questions/14327036/count-vs-len-on-a-django-queryset) – Medorator

2

sólo para destacar @ Yuji'Tomita'Tomita comentario anterior como una respuesta por separado:

Hay un filtro llamado length llamar len() en nada.

lo que podría utilizar:

{{ some_queryset|length }} 
Cuestiones relacionadas