2012-09-04 22 views
8

Próbuję pokazać div s zależy od tego, czy wpis w bazie poczyniono:jeśli zmienna i zmienna jest zdefiniowana - 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> 

To jest uproszczony fragment - wzór wykonuje. Zasadniczo, jeśli tytuł jest w bazie danych, pokaż tylko div1, jeśli oba title 1 i title 2 są w bazie danych, pokazują div1 i div2 i tak dalej.

Obecnie ten rodzaj utworów, jak pokazuje div Chcę pokazać, ale z jakiegoś powodu pokazuje również następny. Jeśli mam tytuł div 1 pokazuje 1 i 2, jeśli mam tytuł div 1 i 2 pokazuje 1, 2, and 3

Jestem naprawdę mylić, jestem naprawdę nowego do Jinja2. Nie jestem pewien, czy to jest moje pozycjonowanie składni w html, czy też składnia jest zła, lub jeśli nie jesteś w stanie sprawdzić dwóch zmiennych ... każda pomoc byłaby doceniana.

+0

Czy na pewno zmienne Jinja nie są zdefiniowane w kontekście? Zawsze możesz to przetestować, dzieląc {%, jeśli definicja słowa post.wrk_1_ jest zdefiniowana, a post.wrk_2_title jest zdefiniowana%} w dwóch pozycjach if i spójrz na wynikowy html. – voscausa

+0

@vocausa Domyślam się, że nie wiem, co zdefiniowane oznacza, założyłem, kiedy wprowadzono wpis do bazy danych, ale nic nie zostało dodane z formularza, co oznacza, że ​​kiedy ten wpis jest pobierany z bazy danych, jego "niezdefiniowany" na początku myślałem pojawiłoby się jako "None", ale wydaje się, że robi wpis ... może pusty ciąg znaków? więc sprawdzając "określony", jeśli istnieje wpis, pokaże to div. – Jesse

+0

Definicja zmiennej o wartości Brak. Nie zdefiniowane oznacza: zmienna nie jest znana. – voscausa

Odpowiedz

27

jak w Pythonie, 0, None, [], {} i "" są fałszywe. Cokolwiek poza tym, to prawda.

„if w Jinja jest porównywalna z if wypowiedzi Python W najprostszej postaci można użyć do sprawdzenia, czy zmienna jest zdefiniowane, nie jest pusta lub nie fałszywa.”

{% if post and post.wrk_1_title %} 

{% endif %} 

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

+0

tylko po to, aby potwierdzić, że rozumiem powyższe stwierdzenie, że twoje stwierdzenie jinja zdefiniowane jest testem, aby sprawdzić, czy istnieje zmienna? – Jesse

+0

Tak, ale należy zdefiniować 'post'. Jeśli nie wiesz, czy zdefiniowano 'post', powinieneś przetestować go:' post i post.wrk_1_title'. –

Powiązane problemy