python 一行写jinja2宏与多行写宏的区别?

gijlo24d  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(130)

我有下一个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()却能按预期工作?

yvgpqqbh

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"(但没有两个换行符)。

相关问题