Operador ternario de plantilla de Django

3 minutos de lectura

avatar de usuario
Luego

Me preguntaba si había un operador ternario (¿condición? valor verdadero: valor falso) que podría usarse en una plantilla de Django. Veo que hay uno de python (valor verdadero si la condición es un valor falso), pero no estoy seguro de cómo usarlo dentro de una plantilla de Django para mostrar el html proporcionado por uno de los valores. ¿Algunas ideas?

avatar de usuario
jeroenp

Puedes usar el filtro síno:

{{ value|yesno:"yeah,no,maybe" }}

Puedes aprender más aquí

  • Brillante. Gracias por la respuesta. Sabía que esto existía, pero no podía recordar.

    – Nandeep Malí

    27 de enero de 2013 a las 14:04

  • Muy agradable y simple, pero cuando quiero usar algunas variables, parece que este filtro no es aplicable. Por ejemplo, me gustaría usar {{ expr_or_value | yesno : "the string", other_variable_value }}

    – ivkremer

    20 de abril de 2015 a las 15:14

  • ¡Esta debería ser la respuesta seleccionada! Esto es exactamente lo que se pregunta.

    – Pepedú

    26 de mayo de 2017 a las 2:30

¿Por qué necesitaría un operador ternario dentro de una plantilla? {% if %} y {% else %} son todo lo que necesitas.

O podrías probar el firstof etiqueta:

{% firstof var1 var2 var3 %}

que genera el primero de var1, var2 o var3 que se evalúa como un valor verdadero.

  • Supongo que tienes razón, solo usaré if/else. Simplemente adicto al ternario, supongo.

    – Anónimo

    24 de junio de 2010 a las 13:14

  • También me gustaría ver soporte ternario.

    – set

    20 de noviembre de 2012 a las 18:39

  • Tiendo a estar en desacuerdo con Daniel. Recientemente convertí una plantilla de django en una plantilla de javascript simple: {% if data_complete %}{{ data }}{% else %}{{ something_else }}{% endif %} convertirse <%= data_complete ? data : something_else %> … el segundo es mucho más compacto y elegante. Sería bueno si hubiera un equivalente en django.

    – Robo B

    27 de abril de 2013 a las 15:51

  • “¿por qué?”… bueno, para hacer algo en 30 segundos en lugar de 10 minutos, por ejemplo. Las plantillas de Django no son tan amigables para los desarrolladores, no siempre es bueno tener que hacer cosas en la vista en lugar de la plantilla.

    – Solicitud de vado

    5 de agosto de 2018 a las 0:53

Solo porque aún no se han mencionado aquí: las etiquetas de plantilla integradas defaulty default_if_none puede ser útil en circunstancias simples:

defecto

Si el valor se evalúa como Falso, usa el valor predeterminado dado. De lo contrario, utiliza el valor.

Por ejemplo:

{{ value|default:"nothing" }}

Si el valor es “” (la cadena vacía), la salida no será nada.

predeterminado_si_ninguno

Si (y solo si) el valor es Ninguno, usa el valor predeterminado dado. De lo contrario, utiliza el valor >.

Tenga en cuenta que si se proporciona una cadena vacía, no se utilizará el valor predeterminado. Use > el filtro predeterminado si desea recurrir a cadenas vacías.

Por ejemplo:

{{ value|default_if_none:"nothing" }}

Si el valor es Ninguno, la salida será la cadena “nada”.

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#default

  • Ver también: stackoverflow.com/questions/7590198/…

    – tim

    11 de marzo de 2016 a las 2:21

  • Lástima que esto no funcione para atributos desconocidos, hubiera sido bueno.

    – Bono

    28 de junio de 2017 a las 9:54

tu no el Django {% if %} templatetag acaba de comenzar a admitir ==, andetc. {% if cond %}{% else %}{% endif %} es lo más compacto posible por ahora.

Acabo de implementar el operador ternario para Django como una etiqueta, mira https://github.com/alexei/django-plantilla-extensiones
Puedes usarlo como:

{% ?: exp1 exp2 exp3 %}
{% ?: exp1 exp2 %}

O:

{% iif exp1 exp2 exp3 %}
{% iif exp1 exp2 %}

Descubrí que tiene más sentido que el yesno filtro, aunque en realidad no es tan Pythonic.

  • ¡Genial gracias! Resuelve el problema de que no puedo pasar variables de contexto a |yesno

    – tim

    14 de abril de 2014 a las 3:36


avatar de usuario
Bill el lagarto

Me pregunto si Python y/o el truco funcionarían.

condition and true_value or false_value

se comporta como el operador ternario: emite true_value si la condición se evalúa como True y false_value si no lo es.

  • ¡Genial gracias! Resuelve el problema de que no puedo pasar variables de contexto a |yesno

    – tim

    14 de abril de 2014 a las 3:36


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad