Wie schreibe ich eine numerische for
Schleife in eine Django-Vorlage? Ich meine so etwas wie
for i = 1 to n
Wie schreibe ich eine numerische for
Schleife in eine Django-Vorlage? Ich meine so etwas wie
for i = 1 to n
Ich habe eine einfache Technik verwendet, die für kleine Fälle ohne spezielle Tags und ohne zusätzlichen Kontext gut funktioniert. Manchmal ist das praktisch
{% for i in '0123456789'|make_list %}
{{ forloop.counter }}
{% endfor %}
{% for i in "x"|rjust:"100" %}
quelle
Leider wird dies in der Django-Vorlagensprache nicht unterstützt . Es gibt ein paar von Anregungen , aber sie scheinen ein wenig komplexer. Ich würde nur eine Variable in den Kontext setzen:
und in der Vorlage:
quelle
Meine Meinung zu diesem Thema finde ich am schönsten. Ich behalte eine my_filters.py im Templatetags-Verzeichnis.
Und Sie würden so verwenden:
quelle
range(1, 16)
Zahlen von 1 beginnen zu bekommen, nicht 0.from django.template import Library;register = Library()
@register.filter(name='range') def filter_range(start, end): return range(start, end)
Dann wird als verwendet{% for i in 1|range:6 %}{% endfor %}
. Siehe die vollständige Antwort unten ....try: return range(number) except: return []
. Auf diese Weise wird niemals ein Fehler ausgelöst und ein leeres Array zurückgegeben (ähnlich wie bei den meisten Vorlagenfunktionen).Vielleicht so?
quelle
Sie können eine Bindung von übergeben
zur Vorlage, dann tun
Beachten Sie, dass Sie ein 0-basiertes Verhalten erhalten (0, 1, ... n-1).
(Aus Gründen der Python3-Kompatibilität aktualisiert)
quelle
range(n)
in Python 3, wenn ich mich richtig erinnere, war xrange darauf veraltetSie übergeben sich nicht
n
selbst, sondernrange(n)
[die Liste der Ganzzahlen von 0 bis n-1 eingeschlossen] aus Ihrer Sicht in Ihre Vorlage, und in letzterer tun Sie dies{% for i in therange %}
(wenn Sie absolut auf 1-basierten statt auf der normalen 0 bestehen -basierter Index, den Sieforloop.counter
im Körper der Schleife verwenden können ;-).quelle
Nur für den Fall, dass jemand anderes auf diese Frage stößt ... Ich habe ein Vorlagen-Tag erstellt, mit dem Sie Folgendes erstellen können
range(...)
: http://www.djangosnippets.org/snippets/1926/quelle
Ich habe mich sehr um diese Frage bemüht und finde hier die beste Antwort: (von wie man 7-mal in den Django-Vorlagen schleift )
Sie können sogar auf die IDX zugreifen!
views.py:
html:
quelle
Du kannst passieren :
{'n': Bereich (n)}
So verwenden Sie die Vorlage:
{% für i in n%} ... {% endfor%}
quelle
Sie sollten " Slice " in der Vorlage verwenden, ein Beispiel wie das folgende:
in views.py
in store_list.html:
quelle
Dieses Verfahren unterstützt alle Funktionen der
range([start,] stop[, step])
Standardfunktion<app>/templatetags/range.py
Verwendungszweck:
Ausgabe
quelle
for value in 0|range:"10,2"
. Sie müssen Ihren Code wie folgt ändern:args = filter(lambda x: isinstance(x, int) and x >= 0, (_min, _max, _step))
Ich gehe die beliebte Antwort nur ein bisschen weiter und mache sie robuster. Auf diese Weise können Sie einen beliebigen Startpunkt angeben, z. B. 0 oder 1. Es verwendet auch die Python-Bereichsfunktion, bei der das Ende eins weniger ist, sodass es beispielsweise direkt mit Listenlängen verwendet werden kann.
Fügen Sie dann in Ihre Vorlage einfach die obige Vorlagen-Tag-Datei ein und verwenden Sie Folgendes:
Jetzt können Sie 1-6 statt nur 0-6 oder hartes Codieren ausführen. Das Hinzufügen eines Schritts würde ein Vorlagen-Tag erfordern. Dies sollte mehr Anwendungsfälle abdecken, sodass es ein Fortschritt ist.
quelle
Dies erfordert im Wesentlichen eine
range
Funktion. Hierfür wurde ein Django-Feature-Ticket ( https://code.djangoproject.com/ticket/13088 ) erstellt, das jedoch mit dem folgenden Kommentar als "nicht behoben" geschlossen wurde.Sie haben einen guten Punkt - Vorlagen sollen sehr einfache Darstellungen der Ansicht sein. Sie sollten die begrenzten erforderlichen Daten in der Ansicht erstellen und im Kontext an die Vorlage übergeben.
quelle
Sie können verwenden:
{% with ''|center: i as range %}
quelle
Für diejenigen, die nach einer einfachen Antwort suchen und nur eine Anzahl von Werten anzeigen müssen, sagen wir 3 von 100 Posts, zum Beispiel fügen Sie
{% for post in posts|slice:"3" %}
sie einfach hinzu und wiederholen Sie sie normal, und es werden nur 3 Posts hinzugefügt.quelle
Wenn die Nummer von einem Modell stammt, fand ich, dass dies ein schöner Patch für das Modell ist:
quelle
quelle