211 Stimmen

Wie kann ich die Größe einer Sammlung innerhalb einer Django-Vorlage überprüfen?

Ich habe eine Liste in meiner Django-Vorlage. Ich möchte etwas tun, nur wenn die Größe der Liste größer als Null ist.

Ich habe versucht myList|length y myList|length_is aber sie waren nicht erfolgreich.

Ich habe überall gesucht und keine Beispiele gefunden. Wie kann ich das überprüfen?

387voto

Alex Martelli Punkte 805329

Ver https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : einfach verwenden, um ihr Beispiel zu reproduzieren:

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

0 Stimmen

|length Ich bekomme immer mit jinja Templating in Flask und mit django verwirrt. Danke für die Informationen. Wirklich hilfreich.

20 Stimmen

El length Filter scheint auch in bedingten Blöcken zu funktionieren, z. B. {% if athlete_list|length > 1 %}...{% endif %}

0 Stimmen

Gibt es dafür keine Inline-Option (in Zeile I)?

136voto

Dave W. Smith Punkte 23003

Wenn Sie eine aktuelle Django, Änderungsliste 9530 wurde ein {% empty %}-Block eingeführt, mit dem Sie Folgendes schreiben können

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

Nützlich, wenn das, was Sie tun wollen, eine besondere Behandlung von Listen erfordert, die möglicherweise leer sind.

1 Stimmen

28voto

mipadi Punkte 377834

Eine Liste gilt als False wenn es keine Elemente hat, also kann man so vorgehen:

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

12voto

Nilesh Tighare Punkte 875

Wenn Sie myList|length und myList|length_is ausprobiert haben und nicht die gewünschten Ergebnisse erhalten, dann sollten Sie myList.count

2 Stimmen

Ich bin schockiert, wie viele Bewertungen dies hat... Wenn myList es un list dann ruft dies list.count() was einen Fehler auslöst, der in der Vorlage maskiert wird und als falscher Wert behandelt wird. Die count Methode ist es, die Anzahl der Instanzen zu zählen, die mit dem übergebenen Wert übereinstimmen. Dies funktioniert jedoch, wenn myList ist ein Queryset.

10voto

Tim Tisdall Punkte 9069

Das funktioniert:

{% if myList|length %}
    Do something!
{% endif %}

Der Grund für die vielen Antworten und die große Verwirrung ist, dass dies nicht immer funktioniert hat. Ich glaube, an einem Punkt konnten Template-Filter nicht für Argumente der if und dies wurde später hinzugefügt. Es ist jetzt auch möglich, Dinge zu tun wie {% if myList|length >= 3 %} . Der Filter sollte das Äquivalent von len(myList) Jeder Objekttyp, der damit umgehen kann, ist also auch in der Lage, die |length Filter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X