Establecer variable en jinja

3 minutos de lectura

avatar de usuario
mitux

Me gustaría saber cómo puedo configurar una variable con otra variable en jinja. Lo explicaré, tengo un submenú y me gustaría mostrar qué enlace está activo. Intenté esto:

{% set active_link = {{recordtype}} -%}

donde recordtype es una variable dada para mi plantilla.

  • Gente que aterriza aquí desde Google: probablemente le interese principalmente el documentos oficiales sobre el set etiquetaen lugar del error de sintaxis específico cometido por el autor de la pregunta aquí o cómo solucionarlo, que es lo que responde la parte superior aquí y en la dirección duplicada vinculada.

    –Mark Amery

    3 marzo 2019 a las 20:33


avatar de usuario
soviético

{{ }} le dice a la plantilla que impresión el valor, esto no funcionará en expresiones como las que está tratando de hacer. En su lugar, utilice el {% set %} etiqueta de plantilla y luego asigne el valor de la misma manera que lo haría en el código python normal.

{% set testing = 'it worked' %}
{% set another = testing %}
{{ another }}

Resultado:

it worked

  • si mi variable es dict what now {% set dict.key = ‘test’ %} no funciona

    – Ib33X

    11 de noviembre de 2011 a las 11:19

  • Una respuesta eliminada también incluía este enlace, que sirve como información complementaria a esta respuesta: jinja.pocoo.org/docs/tricks/#highlighting-active-menu-items

    – Pascual

    12 de julio de 2016 a las 7:37

  • Fue una gran explicación y simple. Me encanta 🙂

    – Faris Rayhan

    27 de julio de 2018 a las 6:32

  • ¿Podemos crear una variable jinja global y usarla en todo el archivo html en el que incrustamos la variable jinja? @Soviut

    – Prueba Sri

    19 de junio de 2020 a las 12:48


  • Para ilustrar aún más mediante la ampliación de este ejemplo: {% set another = testing + " flawlessly" %} {{ another }} Resultado: it worked flawlessly

    – LunkRat

    1 de julio a las 15:14


Bonita abreviatura para Múltiples asignaciones de variables

{% set label_cls, field_cls = "col-md-7", "col-md-3" %}

  • ¿Esto no parece acercarse a responder la pregunta?

    – John R. Perry

    21 ago. 2019 a las 19:00

  • @JohnRPerry Pero es una buena adición a la respuesta aceptada.

    – Conoce a Sinojia

    23 de noviembre de 2020 a las 6:53

Solo configúralo así

{% set active_link = recordtype -%}

  • ¿Por qué específicamente así (el signo menos al final pero no al principio)? Esto eliminaría los espacios en blanco finales pero no iniciales, si no me equivoco. ¿A que final?

    – Leónidas

    7 de noviembre de 2016 a las 6:00


  • Está en la pregunta original ¯\_(ツ)_/¯

    – Graham P Heath

    25 de abril de 2018 a las 19:05


  • El signo menos, adjunto al principio o al final de una declaración (por ejemplo, {%- -%}) le dice a Jinja que elimine la nueva línea que le sigue. ver webforefront.com/django/usebuiltinjinjastatements.html

    – Gevorg Hakobian

    1 de julio de 2021 a las 11:38

Puedes hacer esto con el set etiqueta. Ver el documentación oficial.

Por ejemplo,

{% set foo = "bar" %}
{{ foo }}

salidas

bar

Nota: hay problemas de alcance, lo que significa que los valores de las variables no persisten entre iteraciones de bucle, por ejemplo, si desea que alguna salida esté condicionada a una comparación entre los valores de bucle anteriores y actuales:

{# **DOES NOT WORK AS INTENDED** #}

{% set prev = 0 %}
{% for x in [1, 2, 3, 5] %}
{%- if prev != x - 1 %}⋮ (prev was {{ prev }})
{% endif -%}
{{ x }}
{%- set prev = x %}
{% endfor %}

huellas dactilares

1
⋮ (prev was 0)
2
⋮ (prev was 0)
3
⋮ (prev was 0)
5

porque la variable no se conserva. En su lugar, puede usar un contenedor de espacio de nombres mutable:

{% set ns = namespace(prev=0) %}
{% for x in [1, 2, 3, 5] %}
{%- if ns.prev != x - 1 %}⋮ (ns.prev was {{ ns.prev }})
{% endif -%}
{{ x }}
{%- set ns.prev = x %}
{% endfor %}

que imprime

1
2
3
⋮ (ns.prev was 3)
5

Como era la intención.

¿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