¿Cómo puedo distinguir entre None
y False
en plantillas django?Plantillas Django: Falso vs. Ninguna
{% if x %}
True
{% else %}
None and False - how can I split this case?
{% endif %}
¿Cómo puedo distinguir entre None
y False
en plantillas django?Plantillas Django: Falso vs. Ninguna
{% if x %}
True
{% else %}
None and False - how can I split this case?
{% endif %}
Cada contexto de la plantilla Django contains True
, False
and None
. Para Django 1.10 y posterior, puede hacer lo siguiente:
{% if x %}
True
{% elif x is None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}
Django 1.9 y anteriores no admiten el operador is
en la etiqueta if
. La mayoría de las veces, está bien usar {% if x == None %}
en su lugar.
{% if x %}
True
{% elif x == None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}
Con Django 1.4 y anteriores, usted no tiene acceso a True
, False
y None
en el contexto de la plantilla, puede utilizar el filtro yesno
lugar.
En la vista:
x = True
y = False
z = None
En la plantilla:
{{ x|yesno:"true,false,none" }}
{{ y|yesno:"true,false,none" }}
{{ z|yesno:"true,false,none" }}
Resultado:
true
false
none
Puede crear un filtro personalizado:
@register.filter
def is_not_None(val):
return val is not None
y utilizarla:
{% if x|is_not_None %}
{% if x %}
True
{% else %}
False
{% endif %}
{% else %}
None
{% endif %}
Por supuesto, se puede ajustar el filtro para probar cualquier condición que gusta también ...
Una mejora de las respuestas anteriores podrían ser:
{% if x|yesno:"2,1," %}
# will enter here if x is True or False, but not None
{% else %}
# will enter only if x is None
{% endif %}
Buen uso de lo que ya está disponible en el lenguaje de plantilla. – Brandon
Encuentro esto confuso, no es del todo obvio que estés tratando de distinguir entre Ninguno y Falso. Incluso ahora no entiendo cómo funciona. –
@NickPerkins, lo obtendrá una vez que sepa que el tercer parámetro en el filtro 'yesno' se devuelve si' x' es None. –
Crear context_processor (o usar desde el módulo de django-miscmisc.context_processors.useful_constants
) con True
, False
, None
constantes y utilizar {% if x == None %}
o {% if x == False %}
context_processor.py
:
def useful_constants(request):
return {'True': True, 'False': False, 'None': None}
Aquí es otra manera difícil:
{% if not x.denominator %}
None
{% else %}
{% if x %}
True
{% else %}
False
{% endif %}
{% endif %}
Eso es porque "Ninguno" no tiene el atributo "guarida" ominator ", mientras que es 1 para" True "y" False ".
Esta es la respuesta correcta, pero no debería tener que hacer esto, ¡debería estar incorporado en Django! –