Comment puis-je vérifier la taille d'une collection dans un modèle Django?


147

J'ai une liste dans mon modèle Django. Je veux faire quelque chose uniquement si la taille de la liste est supérieure à zéro.

J'ai essayé myList|lengthet myList|length_ismais ils n'ont pas réussi.

J'ai cherché partout et je ne vois aucun exemple. Comment puis-je vérifier cela?

Réponses:


279

Voir https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : il suffit d'utiliser, pour reproduire leur exemple:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}

| length Je suis toujours confondu avec les modèles de jinja dans Flask et avec django. Merci pour l'information. Très utile.
Doogle

7
Le lengthfiltre semble également fonctionner dans les blocs conditionnels. par exemple{% if athlete_list|length > 1 %}...{% endif %}
Thismatters


20

Une liste est considérée comme Falsesi elle ne contient aucun élément, vous pouvez donc faire quelque chose comme ceci:

{% if mylist %}
    <p>I have a list!</p>
{% else %}
    <p>I don't have a list!</p>
{% endif %}

13

Si vous avez essayé myList | length et myList | length_is et que vous n'obtenez pas les résultats souhaités, vous devez utiliser myList.count


6

Vous pouvez essayer avec:

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% endif %} 

1

Collection.count sans support

{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}

1

J'ai besoin de la longueur de la collection pour décider si je dois rendre la table <thead></thead>

mais je ne sais pas pourquoi @Django 2.1.7 la réponse choisie échouera (vide) par la forloopsuite.

Je dois utiliser {% if forloop.first %} {% endif %}pour surmonter:

<table>
    {% for record in service_list %}
        {% if forloop.first %}
            <thead>
            <tr>
                <th>日期</th>
            </tr>
            </thead>
        {% endif %}
        <tbody>
        <tr>
            <td>{{ record.date }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.