Seite 1 von 1
Jinja - jedes zweite Element
Verfasst: Samstag 29. November 2008, 18:36
von nemomuk
Hallo,
ich versuche gerade jede zweite Zeile mit einem bestimmten "Tag" auszustatten.
Code: Alles auswählen
{% for i in data %}
<a href="" {% if zwei %}class="test"{%endif%}>{{ i }}</a>
{% endfor %}
Auf deutsch: jedes zweite Element soll eine bestimmte Hintergrundfarbe bekommen. Wie mache ich das am geschicktesten?
Danke!
Verfasst: Samstag 29. November 2008, 19:00
von Hyperion
So was könnte per modulo Operator gelöst werden:
Code: Alles auswählen
{% for i in data %}
<a href="" {% if loop.index0 % 2 %}class="test"{%endif%}>{{ i }}</a>
{% endfor %}
Habs nicht getestet, aber ich denke das sollte tun.
Verfasst: Samstag 29. November 2008, 22:08
von Hyperion
Ok, geht sogar noch komfortabler:
Code: Alles auswählen
{% for i in data %}
<a href="" class="{{ loop.cycle('foo', 'bar') }}">{{ i }}</a>
{% endfor %}
Damit ist man sogar nicht nur auf zwei verschiedene Elemente beschränkt, sondern kann theoretisch beliebig viele unterscheiden. Coole Sache das! Ich mag Jinja immer mehr

Verfasst: Samstag 29. November 2008, 22:38
von nemomuk
ja, das ist echt super! Danke!
Verfasst: Samstag 29. November 2008, 23:00
von Leonidas
Wobei ``cycle`` durchaus auch schon in Django auch möglich war, nur dass die Django-Templates das mal über globale Variablen gemacht haben, was natürlich ziemlich blöd ist.
Verfasst: Sonntag 30. November 2008, 10:18
von sma
Leonidas hat geschrieben:Wobei ``cycle`` durchaus auch schon in Django auch möglich war, nur dass die Django-Templates das mal über globale Variablen gemacht haben, was natürlich ziemlich blöd ist.
Aktuell ist es eine Exemplarvariable von `CycleNode`, was nicht threadsafe wäre, wenn sich zwei Threads ein Template teilen. Ansonsten ist da aber nicht gegen zu sagen und es ist doch wohl egal, wie es mal war.
Stefan
Verfasst: Sonntag 30. November 2008, 12:42
von Y0Gi
Mit `itertools.cycle()` oder `enumerate()` ist das in so ziemlich jeder Template-Sprache direkt oder indirekt möglich
Ich bevorzuge ob des geringeren erforderlichen Codes auch seit Jahren den Weg, Zeilen immer mit einer Klasse zu versehen, also etwa `row0`, `row1` und optional weitere.