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.
{{ }}
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
Bonita abreviatura para Múltiples asignaciones de variables
{% set label_cls, field_cls = "col-md-7", "col-md-3" %}
Solo configúralo así
{% set active_link = recordtype -%}
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.
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