2011-04-14 27 views
6

tiene una pregunta aquí.plantilla django si la condición

Tengo el siguiente

{% if form.tpl.yes_no_required == True %} 
      <!-- path 1 --> 
{% else %} 
    {% if form.tpl.yes_no_required == False %} 

     <!-- path 2 --> 
    {% endif %} 
{% endif %} 

El valor para form.tpl.yes_no_required es Ninguno, pero fue encaminado a la ruta 2. Puede alguien por favor explicar por qué esto es así? EDIT: si el valor es none, no quiero que muestre nada.

Respuesta

14

No se puede utilizar el lenguaje de plantillas para probar en contra de lo que cree que son constantes, la el analizador en realidad está probando 2 "literales".

El analizador prueba dos literales con los nombres 'Ninguno' y 'Falso'. Cuando el analizador intenta resolverlos en el contexto, se lanza una excepción VariableDoesNotExist y ambos objetos se resuelven en el valor python Ninguno y Ninguno == Ninguno.

from django.template import Context, Template 
t = Template("{% if None == False %} not what you think {% endif %}") 
c = Context({"foo": foo() }) 

impresiones u 'no es lo que piensan '

c = Context({'None':None}) 
t.render(c) 

impresiones u' no es lo que piensan '

c = Context({'None':None, 'False':False}) 
t.render(c) 

impresiones u''

1

Ninguno! = False Ninguno! = True también ... hacer algunas cosas como esta para el artículo ninguno

{% if form.tpl.yes_no_required %} 
      <!-- path 1 --> 
{% else %} 
    {% if not form.tpl.yes_no_required %} 

     <!-- path 2 --> 
    {% endif %} 
{% endif %} 
+0

quería que mi código para no entra en la ruta 2, pero curiosamente mi código entró en la ruta 2. – goh

+0

@amateur puedes verificarlo en python y si no hay ningún tipo cambiarlo a False – Efazati

+0

realmente necesitaba los 3 valores, verdadero falso y ninguno. – goh