Come posso controllare le dimensioni di una collezione all'interno di un modello Django?


147

Ho un elenco nel mio modello Django. Voglio fare qualcosa solo se la dimensione dell'elenco è maggiore di zero.

Ho provato myList|lengthe myList|length_isma non hanno avuto successo.

Ho cercato dappertutto e non vedo alcun esempio. Come posso controllare questo?

Risposte:


279

Vedi https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : basta usare, per riprodurre il loro esempio:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}

| lunghezza Mi confondo sempre con il jinja che modella in Flask e il django. Grazie per l'informazione. Davvero utile.
Doogle,

7
Il lengthfiltro sembra funzionare anche in blocchi condizionali. ad es.{% if athlete_list|length > 1 %}...{% endif %}
Questione


20

Una lista è considerata Falsese non ha elementi, quindi puoi fare qualcosa del genere:

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

13

Se hai provato myList | length e myList | length_is e non ha ottenuto i risultati desiderati, allora dovresti usare myList.count


6

Puoi provare con:

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

1

Collection.count senza parentesi

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

1

Ho bisogno della lunghezza della raccolta per decidere se eseguire il rendering della tabella <thead></thead>

ma non so perché @Django 2.1.7 la risposta scelta fallirà (svuota) il mio forloopdopo.

Devo usare {% if forloop.first %} {% endif %}per superare:

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.