web-dev-qa-db-fra.com

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

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

J'ai essayé myList|length et myList|length_is mais ils n'ont pas réussi.

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

125
MrDatabase

Voir https://docs.djangoproject.com/fr/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 %}
238
Alex Martelli

Si vous utilisez un Django récent, liste des modifications 95 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 de parcourir une liste non vide.

89
Dave W. Smith

Une liste est considérée comme False si 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 %}
20
mipadi

Si vous avez essayé myList | length et myList | length_is sans obtenir les résultats souhaités, vous devez utiliser myList.count

12
Nilesh Tighare

Vous pouvez essayer avec:

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

Collection.count sans support

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

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

mais je ne sais pas pourquoi @ Django 2.1.7 la réponse choisie échouera (vide) mon forloop après.

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

<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>
0
C.K.