Como posso verificar o tamanho de uma coleção dentro de um modelo do Django?

147

Eu tenho uma lista no meu modelo do Django. Eu quero fazer algo apenas se o tamanho da lista for maior que zero.

Eu tentei myList|lengthe myList|length_iseles não foram bem sucedidos.

Eu procurei por todo o lado e não vejo nenhum exemplo. Como posso verificar isso?

MrDatabase
fonte

Respostas:

279

Consulte https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : basta usar, para reproduzir seu exemplo:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}
Alex Martelli
fonte
| length Eu sempre me confundo com templates jinja no Flask e com django. Obrigado pela informação. Realmente util.
Doogle 29/07
7
O lengthfiltro também parece funcionar em blocos condicionais. por exemplo{% if athlete_list|length > 1 %}...{% endif %}
Thismatters 08/08
20

Uma lista é considerada como Falsese não tiver elementos, para que você possa fazer algo assim:

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

Se você tentou myList | length e myList | length_is e não está obtendo os resultados desejados, use myList.count

Nilesh Tighare
fonte
6

Você pode tentar com:

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

Collection.count sem suporte

{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}
Ahmed Adewale
fonte
1

Preciso do comprimento da coleção para decidir se devo renderizar a tabela <thead></thead>

mas não sei por que @Django 2.1.7 a resposta escolhida falhará (esvaziará) forloopdepois.

Eu tenho que usar {% if forloop.first %} {% endif %}para superar:

<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
fonte