¿Cómo puedo verificar el tamaño de una colección dentro de una plantilla de Django?

147

Tengo una lista en mi plantilla de Django. Quiero hacer algo solo si el tamaño de la lista es mayor que cero.

Lo he intentado myList|lengthy myList|length_isno han tenido éxito.

He buscado por todas partes y no veo ningún ejemplo. ¿Cómo puedo verificar esto?

MrDatabase
fuente

Respuestas:

279

Consulte https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : solo use, para reproducir su ejemplo:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}
Alex Martelli
fuente
| length Siempre me confundo con las plantillas jinja en Flask y con django. Gracias por la información. De mucha ayuda.
Doogle
77
El lengthfiltro también parece funcionar en bloques condicionales. por ejemplo{% if athlete_list|length > 1 %}...{% endif %}
Thismatters
20

Se considera que una lista es Falsesi no tiene elementos, por lo que puede hacer algo como esto:

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

Si probó myList | length y myList | length_is y no obtiene los resultados deseados, entonces debe usar myList.count

Nilesh Tighare
fuente
6

Puedes probar con:

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

Collection.count sin soporte

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

Necesito la longitud de la colección para decidir si debo renderizar la tabla <thead></thead>

pero no sé por qué @Django 2.1.7 la respuesta elegida fallará (vacía) mi forloopdespués.

Tengo 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
fuente