padding/ljust with ansible template and jinja



我正在寻找一种方法来创建一个模板与这个字典。

data= {
"_dictionary": {
"keyone": "abc",
"rtv 4": "data2",
"longtexthere": "1",
"keythree": "data3",
"keyfour": "data1234",
}
}

模板输出应该是这样的格式:

keyone          abc
keytwo          data2
longtexthere    1
keythree        data3
keyfour         data1234

我可以用python创建它:

w = max([len(x) for x in data['_dictionary'].keys()])
for k,v in data['_dictionary'].items():
print('    ', k.ljust(w), '  ', v)

但是我没有办法在jinja2模板中创建它。我还没有找到一个人来代替ljust。

目前我的模板是这样的,但是我得到了一个没有格式的输出。

{% for key, value in data['_dictionary'].items() %}
{{ "%st%s" | format( key, value ) }}
{% endfor %}

有什么想法,建议吗?

例如

- debug:
msg: |
{% for k,v in data['_dictionary'].items() %}
{{ "{:<15} {}".format(k, v) }}
{% endfor %}

msg: |-
keyone          abc
rtv 4           data2
longtexthere    1
keythree        data3
keyfour         data1234

参见format和format String Syntax。


:,创建格式dynamicaly。,

A:例如,在字典中查找最长的键。在第一列的长度上增加1个空格。以同样的方式,计算第二列的长度,并在单独的变量

中创建格式字符串
- debug:
msg: |
{% for k,v in data['_dictionary'].items() %}
{{ fmt.format(k, v) }} # comment
{% endfor %}
vars:
col1: "{{ data._dictionary.keys()|map('length')|max + 1 }}"
col2: "{{ data._dictionary.values()|map('length')|max + 1 }}"
fmt: "{:<{{ col1 }}} {:<{{ col2 }}}"

msg: |-
keyone        abc       # comment
rtv 4         data2     # comment
longtexthere  1         # comment
keythree      data3     # comment
keyfour       data1234  # comment

正在工作,最后我的j2文件是:

{% set col1 = data._dictionary.keys()|map('length')|max %}
{% set fmt = "{:<" + col1|string + "}    {}" %}
{% for key, value in data._dictionary.items() %}
{{ fmt.format(key, value) }}
{% endfor %}

谢谢。

相关内容

  • 没有找到相关文章