2010-09-17 17 views
13

Tengo el siguiente código en mi plantilla que supone comparar el valor de watchinstance.shift, que puede ser "DÍA" o "NOCHE", con una cadena literal "DÍA". La comparación siempre falla.El valor de variable de la plantilla de Django a la comparación literal de cadena falla

{% for watchinstance in watchinstance_list %} 
    {% if watchinstance.shift == "DAY" %} 
     <p>shift is DAY</p> 
    {% endif %} 
{% endfor %} 

Usando ifequal no funciona bien:

{% for watchinstance in watchinstance_list %} 
    {% ifequal watchinstance.shift "DAY" %} 
     <p>shift is DAY</p> 
    {% endifequal %} 
{% endfor %} 

Sin embargo, sólo llamar {{ watchinstance.shift }} funciona como espera:

{% for watchinstance in watchinstance_list %} 
    {{ watchinstance.shift }} 
{% endfor %} 

devuelve los días y noches.

He comprobado si watchinstance.shift devuelve caracteres adicionales, y no se ve como lo hace ... ¿Qué más puedo perder aquí?

Respuesta

10

Un par de posibilidades:

  1. La cadena .shift tiene espacios en blanco extra. Usar esto para una doble comprobación:

    {% for watchinstance in watchinstance_list %} 
        X{{ watchinstance.shift }}X 
    {% endfor %} 
    
  2. atributo El .shift no es una cadena, pero un objeto que stringifies a "día" o "NOCHE". En ese caso, la sustitución de variable en {{ watchinstance.shift }} se vería igual que una cadena, pero la comparación en {% ifequal watchinstance.shift "DAY" %} fallaría.

+0

+1. Tiene sentido. –

+0

1) Sí, esa es la forma en que originalmente verifiqué los caracteres adicionales. No hubo ninguno –

+0

2) ¡Estaba sospechando que tenía algo que ver con eso! ¡De hecho, es una referencia de clave externa a la instancia del modelo de cambio! Después de buscar durante 2 horas, ¡finalmente encontré la manera de aplicarlo! –

41

Así que después de buscar Django docs durante 2 horas, finalmente encontré una manera de hacer que funcione:

{% if watchinstance.shift|stringformat:"s" == "DAY" %} 
+0

¡Me salvaste el día! – azuax

Cuestiones relacionadas