2016-07-22 4 views
0

Ich übergebe eine Abfrage von Menschen zu meinem Django-Vorlage, von denen einige einen "Sitz" zugewiesen haben und andere, die nicht haben. Sitze können niemandem zugewiesen werden und bleiben daher leer. Ich möchte, dass die Vorlage für jeden Sitzplatz das Abfrage-Set durchläuft, um nach einer Person auf diesem Sitz zu suchen. Wenn die for-Schleife niemanden für diesen Sitz findet, möchte ich, dass sie einen leeren Sitzplatz rendert. Hier ist, was ich dachte:Django Template-Tag Suche durch for-loop Suche nach bestimmten Objekt mit Standard, wenn nicht gefunden

{% for person in people %} 
    {% if person.seat_num = 1 %} 
     <div class="filled_seat"></div> 
    {% endif %} 
{% empty %} 
    <div class="empty_seat"></div> 
{% endfor %} 

Außer mir klar, dass {% leer%} nur dann ausgelöst wird, wenn der Satz wiederholt wird durch leer ist, während ich einen Standard haben muß, wenn der Sitz nicht gefunden wird (auch bekannt als nichts in der Menge überlebt die „if“ Bedingung.

+1

Es könnte besser funktionieren erzeugen 'filled_seats' und' empty_seats' querysets in der Ansicht und geben sie in die Vorlage, statt so viel Berechnung tun in der Vorlage. –

Antwort

0

John Gordons Kommentar ließ mich erkennen, dass ich nicht versuchen sollte, zu viel in der Vorlage selbst zu tun. In der Ansicht habe ich eine Liste mit Namen „Sitze“ und füllte die entsprechenden Sitze, und sie dann an die Vorlage übergeben:

seats = [] 
    for n in range(4): 
     try: 
      seats.append(students.objects.get(seat_num=n+1)) 
     except: 
      seats.append(None) 

ich dann Schleife einer nach dem anderen durch den Sitzen Zyklus verwendet und prüfen, ob dieser Sitz gefüllt und dann die entsprechende div erzeugen:

{% for seat in seats %} 
    <td> 
    {% if seat %} 
     <div class="filled_seat"></div> 
    {% else %} 
     <div class="empty_seat"></div> 
    {% endif %}       
    </td> 
{% endfor %} 
0

Ja, denn for...empty funktioniert wie das. Es kann im Grunde nicht wissen, ob Ihr Sitz leer ist oder nicht, für die Sie benötigen, um Ihre eigene Logik zu implementieren.

Ich kenne die Details Ihres Modells nicht, aber wenn Sie von Ihrem Beispiel ausgehen, müssen Sie etwas tun:

{% for person in people %} 
    {% if person.seat_num = 0 %} 
     <div class="empty_seat"></div> 
    {% else %} 
     <div class="filled_seat"></div> 
    {% endif %} 
{% endfor %} 
+0

Das ist, was ich zuerst dachte, aber das Problem damit ist, dass es ein leeres_Sitzdiv für jede Person erzeugt, die nicht in Sitz 1 ist, während ich möchte, dass das Endergebnis ein einzelner "gefüllter_Sitz" div oder ein einzelner "leerer_Sitz" div ist . – TBK

+0

Was hat eine Person ohne Sitz in Ihrem Sitzmodell nach Ihrem Modell? –

+0

Ich habe ein Update gemacht, also wenn die Person keinen Sitz hat (ich nehme an, es ist 0), ist sie leer oder sonst ausgefüllt. Sie bekommen die Idee, Logik hängt davon ab, wie Sie leeren Platz in Ihrem Modell darstellen (was ich nicht weiß) –