【问题标题】:Jinja2 render is not replacing variables with valuesJinja2 渲染没有用值替换变量
【发布时间】:2022-01-01 05:10:34
【问题描述】:

我有以下问题: 键/值:

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

jinja2 模板:

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

我希望在渲染文件中我得到的是值而不是键,但是我得到了这个输出:

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

要渲染的python代码或多或少是这样的:

#!/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))

【问题讨论】:

    标签: loops for-loop variables jinja2


    【解决方案1】:

    我的python程序:

    str = """
     {"link_1": "ge0/0/1", "link_2": "ge0/0/2", "link_3": "ge0/0/3", "link_4": "ge0/0/4"}
    """
    kvdata = json.loads(str)
    env = Environment(loader = FileSystemLoader(''))
    template = env.get_template('test.j2')
    
    print(template.render(var=kvdata))
    

    我的 test.j2:

    {% for v in var %}
    set interface {{var[v]}} speed 1g
    {% endfor %}
    

    结果:

    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
    

    【讨论】:

      【解决方案2】:

      很遗憾,我无法让您的解决方案发挥作用, 我现在使用以下解决方案:

      {% set myLinkDict = ({link_1: 'ge0/0/1', link_2: 'ge0/0/2', link_3: 'ge0/0/3', link_4: 'ge0/0/4'}) %}
      {% for link, port in myLinkDict.items() -%}
       set interface {{ port }} speed 1g
      {% endfor -%}
      

      【讨论】:

        猜你喜欢
        • 2015-11-08
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        相关资源
        最近更新 更多