Jak mogę sprawdzić rozmiar kolekcji w szablonie Django?

147

Mam listę w moim szablonie Django. Chcę coś zrobić tylko wtedy, gdy rozmiar listy jest większy niż zero.

Próbowałem myList|lengthi myList|length_isale nie były one udane.

Szukałem wszędzie i nie widzę żadnych przykładów. Jak mogę to sprawdzić?

MrDatabase
źródło

Odpowiedzi:

279

Zobacz https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : po prostu użyj, aby odtworzyć ich przykład:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}
Alex Martelli
źródło
| length Zawsze mylę się z szablonami jinja w Flasku iz django. Dzięki za informację. Naprawdę pomocny.
Doogle
7
lengthFiltr wydaje się również do pracy w blokach warunkowych. np.{% if athlete_list|length > 1 %}...{% endif %}
Thismatters
93

Jeśli używasz niedawnego Django, lista zmian 9530 wprowadziła blok {% empty%}, umożliwiający pisanie

{% for athlete in athlete_list %}
  ...
{% empty %}
  No athletes
{% endfor %}

Przydatne, gdy coś, co chcesz zrobić, obejmuje iterację po niepustej liście.

Dave W. Smith
źródło
Źródła
Thales Ceolin
20

Uważa się False, że lista nie zawiera elementów, więc możesz zrobić coś takiego:

{% if mylist %}
    <p>I have a list!</p>
{% else %}
    <p>I don't have a list!</p>
{% endif %}
mipadi
źródło
13

Jeśli wypróbowałeś myList | length i myList | length_is i nie daje to oczekiwanych rezultatów, powinieneś użyć myList.count

Nilesh Tighare
źródło
6

Możesz spróbować z:

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% endif %} 
Atarx
źródło
1

Kolekcja.count bez nawiasu

{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}
Ahmed Adewale
źródło
1

Potrzebuję długości kolekcji, aby zdecydować, czy powinienem renderować tabelę <thead></thead>

ale nie wiem, dlaczego @Django 2.1.7 wybrana odpowiedź zakończy się niepowodzeniem (pusta) forloop.

Muszę {% if forloop.first %} {% endif %}przezwyciężyć:

<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
źródło