首页 > 解决方案 > 如何在 Jinja2 模板中为变量指定列?

问题描述

我有一个看起来像这样的 jinja2 模板。

{% for file in result['files'] %}
descriptiontxt        {{ inventory_hostname }}{{ file['path'] | truncate(50)}} {{ {{ '%Y%m%dT%H%M%S' | strftime(file['lastwritetime']) }} MoreDescriptiveText

在此示例中,输出可能如下所示。

descriptiontxt        host1C:\dir\directory\directory\directory\txt.txt 20210106T081330 MoreDescriptiveText
descriptiontxt        host2C:\dir\directory\txt.txt 20210106T081330 MoreDescriptiveText
descriptiontxt        host3C:\dir\directory\truncated\example\123456677 20210106T081330 MoreDescriptiveText

我希望输出看起来像这样。

descriptiontxt        host1C:\dir\directory\directory\directory\txt.txt 20210106T081330 MoreDescriptiveText
descriptiontxt        host2C:\dir\directory\txt.txt                     20210106T081330 MoreDescriptiveText
descriptiontxt        host3C:\dir\directory\truncated\example\123456677 20210106T081330 MoreDescriptiveText

如何确保文件每一行的日期字符串从第 72 列(或其他位置)开始?无论前一个条目是 10 个字符还是 50 个字符,假设对前一个变量的截断可确保路径变量永远不会溢出到文件的该部分。

谢谢你。

标签: jinja2ansible-template

解决方案


也许通过使用format过滤器,像这样:

{% for file in result['files'] %}
descriptiontxt        {{ inventory_hostname }}{{ "%-50s"|format(file['path'] | truncate(50))}} {{ {{ '%Y%m%dT%H%M%S' | strftime(file['lastwritetime']) }} MoreDescriptiveText
{% endfor %}

file['path']即使实际字符串较短,这也确保占用 50 个字符。


推荐阅读