80 votes

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

L'une des façons de limiter les objets est d'ajouter une limitation à une fonction, comme ceci

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

Cependant, comment réaliser cela dans un modèle plutôt que dans une vue ?

Je sais qu'il est possible de filtrer les objets dans un modèle et de limiter les caractères, mais comment limiter réellement le nombre d'objets affichés dans une boucle. Par l'intermédiaire du modèle. Par exemple, le code suivant parcourra en boucle tous les objets....

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

Comment interrompre la boucle, disons après les 3 premiers objets/éléments. Et comment le faire dans le modèle. Merci d'avance.

172voto

Daniel Roseman Points 199743

Il existe un slice que vous pouvez utiliser dans les modèles. Cela fonctionne exactement de la même manière que le découpage en tranches dans la vue.

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

12voto

Chris Heisel Points 51

Vous voulez utiliser le tranche filtre de modèle

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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X