2017-05-30 75 views
0

我有以下变量定义:列表中的Jinja2模板列表

datasources: 
    - { name: 'dsname', target: ['server1', 'server2'] } 

运行以下剧本:

--- 
- name: Create file 
    template: src="datasource.py" dest="/tmp/datasource.py" 

的神社模板我试图从建立如下:

{% for ds_target in datasources.target 
%} Target:{{ ds_target }} {% 
endfor %} 

我该如何做模板以获得以下输出?

Target:server1 Target:server2

任何提示将高度赞赏

+0

'target:'server1,'server2'' this syntax is invalid - please fix quotes。 –

+0

谢谢你的抬头。 我需要帮助如何使它工作,我需要在列表中的列表在for循环中解析。 –

回答

0

我添加了另一个回路打开名册“目标”,所以我的代码看起来是这样的:

{% for datasource in datasources 
%} {% for dst in datasource.target %}Target:{{ dst }} {% endfor %}{% endfor %} 

非常感谢你们!

0

当然,你需要循环datasources本身,然后在每次迭代访问target

{% for ds in datasources %} Target:{{ ds.target }} {% endfor %} 
+0

对不起,我犯了一个错误,datasources.target变量被修正为上面的“target:'server1,'server2'' –

+0

我想循环”datasources.target“,例如。对于列表中的每个服务器“目标” –

0

如果你的问题是“我应该怎么界定我的target列表,使我的模板工作?“,那么答案是:

datasources: 
    - name: dsname 
    target: 
     - server1 
     - server2 

或其他记号:

datasources: 
    - { name: 'dsname', target: ['server1', 'server2'] } 
+0

我也试过这个,这样做有如下的输出: 目标:[u'server1,server2'] –

+0

@VeselinHristov如果你有这个输出,你的报价不正确。请复制/粘贴我的答案。请注意,第一个表示法没有引号,所以不太容易出现这种错误。 –

+0

你是对的@KonstantiSuvorov,目标var应该是:['server1','server2'] –