¿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?

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 %}

| 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 %}

13

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


6

Puedes probar con:

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

1

Collection.count sin soporte

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

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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.