Estoy ejecutando una consulta para obtener los últimos 5 artículos News
. En mi plantilla, quiero mostrar el primer elemento en una ubicación, luego los 4 restantes en la parte inferior de la página.La mejor manera de cortar un queryset de Django sin golpear la base de datos más de una vez
En mi plantilla, hago algo como esto:
{% for n in news|slice:":1" %}
{{ n.headline }}
{% endfor %}
... more HTML ...
{% for n in news|slice:"1:" %}
{{ n.headline }}
{% endfor %}
Cuando miro en la barra de depuración, esto se traduce en dos consultas a la base de datos: uno con LIMIT 1
y otro con LIMIT 4 OFFSET 1
, pero por lo demás el mismo . Aprecio que esta es la manera en que Django inteligentemente solo solicita las cosas que realmente usas, pero en este caso parece un poco excesivo. ¿Cuál es la mejor manera de hacer este tipo de cosas?
Desde la perspectiva de un programador, ciertamente está llamando a un bucle 'for' dos veces, y ambos están configurados en una plantilla que llama a una consulta. ¿Podrías tomar los 5 a la vez, almacenarlos en el cliente y mostrar el contenido de una copia en caché? – Droogans
bueno, eso es lo que trato de hacer. En la vista, agarro los 5, pero el conjunto de preguntas solo evalúa cuando trato de cortar el primero 1. Sin embargo, el primero para el bucle realmente no necesita ser un bucle ya que es solo 1 elemento. –