2010-08-19 10 views
17

En la aplicación de mi blog, quiero mostrar una lista de publicaciones de blog y la primera imagen conectada a esta publicación. Ahora lo hago de esta manera:Obtiene el primer elemento de QuerySet en la plantilla

{% for image in entry.image_set.all|slice:"1" %} 
    <img src="{{ image.get_absolute_url }}"> 
{% endfor %} 

¿Hay un acceso directo de plantilla no sé acerca, o tal vez debería escribir mi propia Manager?

Respuesta

40
No

más corto, pero se puede usar first:

{% with entry.image_set.all|first as image %} 
    <img src="{{ image.get_absolute_url }}"> 
{% endwith %} 
+0

Gracias. Es un poco más limpio y "se siente" mejor. ¿Hay alguna diferencia computacionalmente? – vorpyg

+1

@voypyg - Verificaría que en realidad no recupera todo de la base de datos - eche un vistazo al SQL ejecutado. –

+0

Parece que ambos filtros activan la cláusula SQL LIMIT. – vorpyg

2

Desde Django 1.6 se puede hacer

<img src="{{ entry.image_set.first.get_absolute_url }}"> 
Cuestiones relacionadas