2012-09-04 18 views
8

Ich versuche, auf s zu zeigen div abhängig, ob ein Datenbankeintrag vorgenommen wurde:wenn die Variable und Variable definiert ist - jinja2

<table class="info-table"> 
<tr><td> 
<div class="info-table_titlebox"> 
{% if post.wrk_1_title is defined %} 
    <div class="info-title_title"> 
    <h2>{{post.wrk_1_title}}</h2> 
    <h3>Facilitator: {{post.wrk_1_facilitator}}</h3> 
    <h4>Location: {{post.wrk_1_locate}}</h4> 
    <h4>Max participants: {{post.wrk_1_max}}</h4> 
    </div> 
    <div class="info-title_list"> 
     <ul> 
     <li>{{post.eventday}} - <b>Week {{post.eventweek}}</b></li> 
     <li class="info-title_listright">{{post.wrk_1_time}}</li> 
     </ul> 
    </div> 
    <p>{{post.wrk_1_description}}</p> 
{% endif %} 
</div> 
</td> 
<td> 
<div class="info-table_titlebox"> 
{% if post.wrk_1_title is defined and post.wrk_2_title is defined %} 
    <div class="info-title_title"> 
    <h2>{{post.wrk_2_title}}</h2> 
    <h3>Facilitator: {{post.wrk_2_facilitator}}</h3> 
    <h4>Location: {{post.wrk_2_locate}}</h4> 
    <h4>Max participants: {{post.wrk_2_max}}</h4> 
    </div> 
    <div class="info-title_list"> 
     <ul> 
     <li>{{post.eventday}} - <b>Week {{post.eventweek}}</b></li> 
     <li class="info-title_listright">{{post.wrk_2_time}}</li> 
     </ul> 
    </div> 
    <p>{{post.wrk_2_description}}</p> 
{% endif %} 
</div> 
</td> 

Dies ist ein vereinfachtes Schnipsel - das Muster geht weiter. Grundsätzlich, wenn der Titel in der Datenbank ist, zeigen Sie nur div1, wenn sowohl title 1 als auch title 2 sind in der Datenbank zeigen div1 und div2 und so weiter.

Momentan zeigt diese Art von Arbeiten, wie es zeigt die div Ich möchte zeigen, aber aus irgendeinem Grund zeigt es auch die nächste. Wenn ich Titel für div 1 haben zeigt es 1 und 2, wenn ich einen Titel für div 1 haben und 2 es zeigt 1, 2, and 3

Ich bin wirklich verwirrt, wie ich Jinja2 wirklich neu bin. Ich bin nicht sicher, ob es meine Positionierung der Syntax im HTML ist, oder wenn die Syntax falsch ist, oder wenn Sie nicht in der Lage sind, über zwei Variablen zu überprüfen ... jede Hilfe würde geschätzt werden.

+0

sind Sie sicher, dass die jinja Variablen nicht im Kontext definiert? Sie können dies immer testen, indem Sie das {% if post.wrk_1_title, das in zwei ifs definiert ist und post.wrk_2_title%% definiert ist, aufteilen und im resultierenden HTML nachsehen. – voscausa

+0

@vocausa Ich denke, ich bin nicht sicher, was definiert bedeutet, ich nahm an, wenn ein Eintrag in der Datenbank gemacht wird, aber nichts von der Formularübergabe hinzugefügt wird, dass bedeutet, dass, wenn dieser Eintrag aus der Datenbank abgerufen wird seine "undefined" zunächst dachte ich es würde als "None" erscheinen, aber es scheint, dass es einen Eintrag macht ... vielleicht eine leere Zeichenfolge? Wenn Sie also nach "Definiert" suchen, wenn es einen Eintrag gibt, wird dieses div angezeigt. – Jesse

+0

Eine Variable mit dem Wert None ist definiert. Nicht definiert bedeutet: Die Variable ist nicht bekannt. – voscausa

Antwort

27

Wie in Python, die 0, None, [], {} und "" sind falsch. Alles andere als das, es ist wahr.

„Die if-Anweisung in Jinja mit der vergleichbar ist, wenn Aussagen von Python In der einfachsten Form können Sie es testen, ob eine Variable definiert ist, nicht leer ist oder nicht falsch ist.“

{% if post and post.wrk_1_title %} 

{% endif %} 

Dokumentation: http://jinja.pocoo.org/docs/templates/#if

+0

nur um zu bestätigen, verstehe ich die obige Aussage Ihre Aussage der Jinja definiert ist ein Test zu prüfen, ob es eine Variable gibt ?? – Jesse

+0

Ja, aber der 'post' sollte definiert werden. Wenn Sie nicht wissen, ob 'post' definiert ist, sollten Sie es testen: 'post and post.wrk_1_title'. –

Verwandte Themen