¿Cómo se limita el lado de la plantilla de la lista de objetos, en lugar del lado de la vista?


83

Una de las formas de limitar los objetos es agregar una limitación a una función como esta

def ten_objects():
    obj = Model.objects.all()[0:10]  # limit to 10
    return {'objects': obj}

Sin embargo, ¿cómo se logra esto dentro de una plantilla en lugar de dentro de una vista?

Sé que puede filtrar objetos dentro de una plantilla y limitar caracteres, pero ¿cómo se limita realmente la cantidad de objetos que se muestran en un bucle? A través de la plantilla. por ejemplo, el siguiente código recorrerá todos los objetos ...

    <ul>
     {% for new in news %}
      <li>
       <p>{{ news.title }}</p>
       <p>{{ news.body }}</p>
      </li>
     {% endfor %}
    </ul>

¿Cómo rompo el bucle, digamos después de los primeros 3 objetos / elementos? ¿Y cómo lo hago dentro de la plantilla? Gracias por adelantado.


Respuestas:


178

Hay un slicefiltro que puede utilizar en las plantillas. Esto funciona exactamente igual que cortar dentro de la vista.

{% for new in news|slice:":10" %}

2
Si tiene un escenario en el que está usando {% for object in user.objects.all %} , puede usar{% for object in user.objects.all|slice:":10" %}
Samir Tendulkar

por favor, dame el enlace de documentación de cortes de django.
squal

1
Está literalmente vinculado a mi respuesta anterior.
Daniel Roseman

Lo tengo @Daniel. Busco slice en el repositorio de github django pero encuentro slice_filter no slice.
squal

12

Desea utilizar la rebanada filtro de plantilla

Aquí está su ejemplo modificado para usarlo:

<ul>
{% for new in news|slice:":3" %}
<li>
<p>{{ new.title }}</p>
<p>{{ new.body }}</p>
</li>
{% endfor %}
</ul>

1
Sé que estoy un poco molesto, pero debería ser: {{ new.title}}y {{ new.body }}
Hussam

este es un ejemplo de código más completo que la respuesta aceptada, esta es una respuesta más útil, así que voté y explico por qué
Keith
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.