django para romper el contador de bucle

Esperemos que este sea rápido / fácil. Conozco una forma de solucionar esto mediante una etiqueta de plantilla personalizada, pero tenía curiosidad por saber si había otros métodos que estaba exagerando. He creado una función de galería de tipos para mi blog, y tengo una página de lista de galería que compagina todas mis galerías. Ahora, no quiero mostrar todas las fotos de cada galería en esa lista, ya que si cada galería tiene incluso 20 imágenes, entonces son 100 imágenes en una página si pagino en 5 publicaciones. Eso sería un desperdicio, y la forma incorrecta de ir sobre las cosas.

La pregunta que tengo es: ¿hay alguna forma de mostrar solo 3 fotos del conjunto de fotos? Lo que me gustaría hacer, pero no creo que sea ​​posible es algo como (pseudocódigo):

{% for photos in gallery.photo_set %} {% if forloop.counter lt 3 %}  {% endif %} {% endfor %} 

A juzgar por la documentación, a menos que me esté faltando por completo, eso no es posible a través del sistema de plantillas. Por lo tanto, solo puedo escribir mi propia etiqueta de plantilla para resolverla. Probablemente podría hacer algo desde el punto de vista, pero no he mirado demasiado la idea. La otra opción que tengo es darle al modelo un campo de vista previa y permitir que el usuario seleccione las fotos que desea en el campo de vista previa.

De todos modos, algunas opciones diferentes, así que pensé en encuestar a la audiencia para ver cómo lo harías. Cualquier opinión es apreciada. Personalmente, disfrutando de que hay muchas maneras de desollar a este gato.

Utilizar:

 {% for photos in gallery.photo_set|slice:":3" %} 

Esto se hace mejor en la colección gallery.photo_set . El “3” codificado en la plantilla es una mala idea a largo plazo.

 class Gallery( object ): def photo_subset( self ): return Photo.objects.filter( gallery_id = self.id )[:3] 

En la función de vista, puedes hacer cosas como elegir 3 fotos al azar o las 3 fotos más recientes.

  def photo_recent( self ): return Photo.objects.filter( gallery_id = self.id ).orderby( someDate )[:3] def photo_random( self ): pix = Photo.objects.filter( gallery_id = self.id ).all() random.shuffle(pix) return pix[:3]