2017-02-01 4 views
0
fly weitergegeben vergleichen

ich in meiner Vorlage folgendes haben innerhalb einer Tabelle:Django in Wert einer Variablen auf der

{% for sb in ship_back %} 
    <tr> 
     <td>{{ sb.ring_name }}</td> 
     <td>{{ sb.release.ring }} pp{{ sb.release.ppack }}</td> 
    </tr> 
{% endfor %} 

Dies erzeugt die folgende Ausgabe:

Larry 15 pp28

Moe 15 PP29

Curly 15 PP30

Shemp 16 PP7

Ich möchte eine horizontale Linie in der Tabelle hinzuzufügen, wenn die {{}} sb.release.ring Wert ändert. Im obigen Beispiel würde das zwischen Curly und Shemp liegen.

Ich würde normalerweise eine Variable für diese außerhalb der for-Schleife erstellen, setzen Sie ihren Anfangswert auf 0, einen Vergleich am Anfang der for-Schleife (Ignorieren der 0 Fall) und wenn es nicht den aktuellen Wert von {{sb.release.ring}}, ich würde die horizontale Linie einfügen.

Ich kämpfe um herauszufinden, wie dies in Django erreichen.

Antwort

0

Versuchen Sie, die ifchanged-Tag, auf folgende Weise:

{% for sb in ship_back %} 

    {# <!-- Style this however you like --> #} 
    {% ifchanged sb.release.ring %} 
     <tr><td>----</td></tr> 
    {% endifchanged %} 

    <tr> 
     <td>{{ sb.ring_name }}</td> 
     <td>{{ sb.release.ring }} pp{{ sb.release.ppack }}</td> 
    </tr> 
{% endfor %} 
+0

Das ist für mich fast funktioniert. Es setzt die


vor Larry und vor Shemp. Letzteres ist passend für was ich will. Ich vermute, dass das ifchanged nichts bewertet, was zu einer Veränderung wird, und deshalb setzt es auch die
dort hin. –

+0

Ich konnte es zur Arbeit bringen, indem ich eine if-Anweisung innerhalb des ifchanged-Blocks hinzufügte. {% ifchanged% sb.release.ring.ring} {% if forloop.counter> = 2%}


{% endif%} {% endifchanged%} –

+0

Wenn es keinen Grund gibt, warum das keine gute Idee ist, werde ich das als akzeptierte Antwort bezeichnen. –

Verwandte Themen