我有下一个jinja2模板:
参见金家2:
{% macro cfg() %}ABC{% endmacro %}
{% macro cfg2() %}
ABC
{% endmacro %}
resource:
{{ cfg()|indent(4) }}
{{ cfg2()|indent(4) }}
下一个python文件:
测试样本:
import os
from jinja2 import Environment, FileSystemLoader
path_dir = "."
loader = FileSystemLoader(searchpath=path_dir)
env = Environment(loader=loader)
template = env.get_template("cfg.jinja2")
data = template.render()
print(data)
它显示下一个结果:
$ python3 test.py
resource:
ABC
ABC
我想知道,为什么cfg()
对indent filter
没有影响,而cfg2()
却能按预期工作?
1条答案
按热度按时间yvgpqqbh1#
来自
indent
文档:返回字符串的副本,每行缩进4个空格。默认情况下,第一行和空行不缩进。
cfg()
返回单行:"ABC"
。第一行不缩进。cfg2()
返回三行,第一行和最后一行为空:"\nABC\n"
。空行不缩进,结果的第二行缩进:"\n ABC\n"
.cfg()
和cfg2()
具有不同输出的原因是因为cfg2
在其定义中具有两个换行符:"{% macro cfg2() %}\nABC\n{% endmacro %}"
.您可以强制第一个示例也缩进:
{{ cfg()|indent(4, first=True) }}
;它将产生与cfg2()
类似但不完全相同输出:" ABC"
(但没有两个换行符)。