es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La renderización de Jinja2 no está reemplazando las variables con valores.

Tengo el siguiente problema:
clave/valores:

..
link_1: ge0/0/1
link_2: ge0/0/2
link_3: ge0/0/3
link_4: ge0/0/4

plantilla jinja2:

..
{% for index in range(1,5) %}
{%- set line = [‘link_’,index]|join %}
set interface {{line}} speed 1g
{% endfor %}

Esperaba obtener los valores en lugar de las claves en el archivo renderizado, pero obtengo esta salida:


set interface link_1 speed 1g
set interface link_2 speed 1g
set interface link_3 speed 1g
set interface link_4 speed 1g

El código python para renderizar es más o menos este:

#!/usr/bin/env python3
from jinja2 import Environment, FileSystemLoader
import yaml

kvdata = yaml.load(open(‘test.yml’))
env = Environment(loader = FileSystemLoader(”))
template = env.get_template(‘test.j2’)

print(template.render(kvdata))

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en la plantilla jinja2 es que está uniendo la cadena ‘link_’ con el índice del bucle usando el filtro |join. En lugar de unir, debería acceder al valor de la clave correspondiente usando el índice del bucle. Aquí hay una plantilla corregida:

    {% for index in range(1,5) %}
      {% set line = 'link_' + index %}  
      set interface {{ kvdata[line] }} speed 1g
    {% endfor %}
    

    Esto producirá la siguiente salida:

    set interface ge0/0/1 speed 1g
    set interface ge0/0/2 speed 1g
    set interface ge0/0/3 speed 1g
    set interface ge0/0/4 speed 1g
    

    Aquí, se usa el índice del bucle para formar el nombre de la clave, y se accede a esa clave usando la notación de corchetes. Esto devolverá el valor deseado de la clave en lugar del nombre de la clave.

Comments are closed.