Django-Vorlagen bieten das integrierte Tag cycle
zum Wechseln zwischen mehreren Werten an verschiedenen Stellen in einer Vorlage (oder für eine Schleife in einer Vorlage), aber dieses Tag wird nicht zurückgesetzt wird in einem Bereich außerhalb der cycle
s-Definition zugegriffen. Dh, wenn Sie zwei oder mehr Listen in Ihrer Vorlage haben, die Zeilen von denen Sie einige CSS-Definitionen odd
und even
verwenden möchten, wird die erste Zeile einer Liste, wo die letzte links aus, nicht mit einem frische Iteration aus der Auswahl (odd
und even
)Alternate Row Coloring in Django-Vorlage mit mehr als einem Satz von Zeilen
zB in den folgenden Code, wenn der erste Blog eine ungerade Anzahl von Einträgen hat, dann ist der erste Eintrag in einem zweiten Blog als even
beginnen wird, wenn ich es will Beginnen Sie bei odd
.
{% for blog in blogs %}
{% for entry in blog.entries %}
<div class="{% cycle 'odd' 'even' %}" id="{{entry.id}}">
{{entry.text}}
</div>
{% endfor %}
{% endfor %}
Ich habe versucht, die Beseitigung dies mit dem resetcycle
Tag Patchen hier angeboten:
Django ticket: Cycle tag should reset after it steps out of scope
ohne Erfolg. (Der Code funktionierte nicht für mich.)
Ich habe auch versucht, meine innere Schleife in ein benutzerdefiniertes Tag zu bewegen, aber das hat auch nicht funktioniert, vielleicht weil der Kompilier-/Render-Zyklus die Schleife zurück in den äußeren bewegt Schleife? (Unabhängig davon, warum es für mich nicht funktionierte.)
Wie kann ich diese einfache Aufgabe erfüllen? Ich würde es vorziehen, keine Datenstruktur in meiner Sicht mit diesen Informationen vorkompiliert zu erstellen; das scheint unnötig. Danke im Voraus.
Man kann das auch etwas kürzer schreiben (zumindest in Django 1.3): '{{forloop.counter | divisibleby: 2 | yesno:" even, odd "} } ' – Michael
Schöne Verbesserung, Michael!Ich habe den Yesno-Filter nie wirklich benutzt, aber ich denke, ich habe eine Menge If/Elen in meinen Vorlagen, die auf diese Weise verkürzt werden könnten. –