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?

MrDatabase
la source

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 %}
Alex Martelli
la source
| 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
93

Si vous utilisez un Django récent, la liste des modifications 9530 a introduit un bloc {% empty%}, vous permettant d'écrire

{% for athlete in athlete_list %}
  ...
{% empty %}
  No athletes
{% endfor %}

Utile lorsque quelque chose que vous voulez faire implique une itération sur une liste non vide.

Dave W. Smith
la source
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 %}
mipadi
la source
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

Nilesh Tighare
la source
6

Vous pouvez essayer avec:

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% endif %} 
Atarx
la source
1

Collection.count sans support

{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}
Ahmed Adewale
la source
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>
CK
la source