【发布时间】:2019-06-27 03:23:49
【问题描述】:
这是我用于生成模板的 Python 代码
import jinja2
with open('test.j2', 'r') as f:
template_body = f.read()
template = jinja2.Template(template_body)#, trim_blocks=True)
result = template.render(longest=len('staging'),
envs=['devel', 'staging', 'prod'])
print(result)
这里的想法是我想根据列表中最长的字符串生成以下缩进。
devel = 1
staging = 1
prod = 1
我终于想出了一个解决方案:
{% for env in envs -%}
{%- set padding = (longest - env|length + 1)|string %}
{% set f = "%-" + padding + "s" -%}
{{ env }}{{ f | format(' ',)}}= 1
{%- endfor %}
但我得到了
$ python test.py
devel = 1
staging = 1
prod = 1
在输出的开头有一个额外的换行符。使用 Python 的调试器,我们可以看到输出:
$ python test.py
> /private/tmp/test.py(11)<module>()
-> print(result)
(Pdb) result
u'\ndevel = 1\nstaging = 1\nprod = 1'
【问题讨论】:
-
处理python脚本中的行并将它们作为资源呈现在jinja中。即处理后,只需迭代它们即可渲染。