【发布时间】:2021-04-06 11:31:41
【问题描述】:
我正在尝试创建一组模板,其名称及其内容基于某些列表和字典动态创建。
导致问题的部分代码如下。
{% 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 模板的新手,我做错了什么?
在最初的问题之后我遇到的另一个问题是在添加了上面的几个模块后组合底部的所有规则时。
我将规则作为“项目”变量名称拆分为字母 - “o、b、j、e、c、t”,而不是收集之前创建的存储在“object_t_1rules”下的规则。我可以通过直接使用创建它们的特定名称来单独访问它们,但不使用 for 循环。我知道 Jinja2 不允许嵌套变量访问。我还能如何在这里实现我想要的?
【问题讨论】:
-
感谢编辑
-
顺便说一句,你应该在 StackOverflow 中隐藏你的 IP...
-
谢谢,但那些都是假的。
-
哦,完美!祝你的项目好运:)
-
我不确定我是否理解您的编辑,但是,我可以参考您一些很棒的文档来源:this in-depth document 和 this webpage
标签: python jinja2 templating