web-dev-qa-db-fra.com

Comment limiter le côté du modèle des objets de liste plutôt que le côté de la vue

L'une des façons de limiter les objets consiste à ajouter une limitation à une fonction comme celle-ci

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

Cependant, comment pouvez-vous y parvenir à l'intérieur d'un modèle plutôt qu'à l'intérieur d'une vue?

Je sais que vous pouvez filtrer les objets dans un modèle et limiter les caractères, mais comment limiter la quantité d'objets affichés dans une boucle. Via le modèle. par exemple, le code suivant fera une boucle à travers tous les objets ....

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

Comment briser la boucle, disons après les 3 premiers objets/objets. Et comment puis-je le faire à l'intérieur du modèle. Merci d'avance.

76
Stu

Il existe un filtre slice que vous pouvez utiliser dans les modèles. Cela fonctionne exactement comme la découpe dans la vue.

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

Vous souhaitez utiliser le filtre de modèle slice

Voici votre exemple modifié pour l'utiliser:

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