从 jinja2 for 循环动态创建变量名的问题

问题描述

我正在尝试创建一组模板,其中包含基于特定列表和字典动态创建的名称及其内容。

导致问题的部分代码如下。

{% for tenant in object_list %}
{%- set name = 'object_t' + tenant + 'rules' %}
{{name}}:
    - permit ip any {{ tenant_public_ip['object_t' + tenant | string +'_pub'['Subnets'][0] }}
{% endfor %}

# combine acls
complete_acls:
  - name: DEFAULT_ACL
    rules: {{'"{{ default_rules }}"'}}

  {% for tenant in object_list %}
  {% set item= 'object_t' + tenant + 'rules' %}
  - name: Tenant_{{tenant}}_ACCESS-VLANS
    rules: {{"{{item}}"}}
  {% endfor %} 

出现错误:模板字符串时出现模板错误:预期标记“,”,得到“{”。

正在解析的参数:

object_list: [1,2,3,4,5]
 
tenant_public_ip: {u''object_t5_pub'': {u''Subnets'': [u''8.51.14.124/28''],u''Vlan_id'': u''5010''},u''object_t2_pub'': {u''Subnets'': [u''8.51.14.128/28''],u''Vlan_id'': u''2010''},u''object_t4_pub'': {u''Subnets'': [u''8.51.14.176/28''],u''Vlan_id'': u''4100''},u''object_t1_pub'': {u''Subnets'': [u''8.51.14.160/28''],u''Vlan_id'': u''1100''},u''object_t3_pub'': {u''Subnets'': [u''8.51.14.144/28''],u''Vlan_id'': u''3100''}} '

我是 Jinja2 模板的新手,我做错了什么?

我在初始问题之后遇到的另一个问题是,在添加了上述几个模块后,在底部合并所有规则时。

我将规则作为“item”变量名称拆分为字母 - “o,b,j,e,c,t”而不是收集之前创建的存储在“object_t_1rules”下的规则。我可以通过直接使用创建它们的特定名称来单独访问它们,但不使用 for 循环。我知道 Jinja2 不允许嵌套变量访问。我在这里还能如何实现我想要的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)