2012-09-04 14 views
8

estoy tratando de mostrar div s depende de si una entrada de la base de datos se ha realizado:si se ha definido variables y variables - 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> 

Este es un fragmento simplificada - el patrón continúa. Básicamente si el título está en la base de datos, muestre solo div1 si ambos title 1 y title 2 están en la base de datos show div1 y div2 y así sucesivamente.

Actualmente este tipo de trabajo funciona como muestra el div que quiero mostrar, pero por alguna razón muestra el siguiente también. Si tengo título para div 1 se nota 1 y 2, si tengo un título para div 1 y 2 se muestra 1, 2, and 3

Estoy muy confundido como yo soy muy nuevo en Jinja2. No estoy seguro de si es mi posición de la sintaxis en el html, o si la sintaxis es incorrecta, o si no puede verificar dos variables ... cualquier ayuda sería apreciada.

+0

¿seguro Jinja las variables no se definen en el contexto? Siempre puede probar esto dividiendo el {% si se define post.wrk_1_title y post.wrk_2_title se define%} en dos if's y mire en el html resultante. – voscausa

+0

@vocausa Supongo que no estoy seguro de qué es lo que significa definido, asumí cuando se realiza una entrada en la base de datos pero no se agrega nada desde el envío del formulario que eso significa que cuando esta entrada se recupera de la base de datos es "indefinido" al principio aparecería como "Ninguno" pero parece que hace una entrada ... ¿quizás una cadena vacía? entonces al marcar "definido" si hay una entrada, se mostrará este div. – Jesse

+0

Se define una variable con un valor Ninguno. No definido significa: la variable no se conoce. – voscausa

Respuesta

27

Al igual que en Python, el 0, None, [], {} y "" son falsas. Cualquier cosa que no sea eso, es Verdadero.

"La sentencia if en Jinja es comparable con el caso de las declaraciones de Python En la forma más simple que puede utilizar para probar si una variable es definido, no está vacío o no falsa:".

{% if post and post.wrk_1_title %} 

{% endif %} 

Documentación: http://jinja.pocoo.org/docs/templates/#if

+0

solo para confirmar que entiendo la afirmación anterior tu diciendo que la jinja definida es una prueba para verificar si hay una variable? – Jesse

+0

Sí, pero el 'post' debe estar definido. Si no sabe si 'post' está definido, debe probarlo:' post and post.wrk_1_title'. –

Cuestiones relacionadas