gpt4 book ai didi

Python Jinja2 调用宏导致(不希望的)换行

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:26 24 4
gpt4 key购买 nike

我的 JINJA2 模板如下所示。

{% macro print_if_john(name) -%}
{% if name == 'John' -%}
Hi John
{%- endif %}
{%- endmacro %}
Hello World!
{{print_if_john('Foo')}}
{{print_if_john('Foo2')}}
{{print_if_john('John')}}

结果输出是

Hello•World!


Hi•John

我不想要“Hello World!”之间的 2 个换行符和“嗨,约翰”。看起来当调用宏导致宏没有输出时,JINJA 无论如何都会插入一个换行符。有什么办法可以避免这种情况吗?我在对宏本身的调用中加上了减号,但这没有帮助。

请注意,我在 http://jinja2test.tk/ 测试了此模板和生成的代码

最佳答案

换行符来自 {{print_if_john(...)}} 行本身,不是宏。

如果您要加入这些 block 或在这些 block 中使用 -,换行符将消失:

>>> from jinja2 import Template
>>> t = Template('''\
... {% macro print_if_john(name) -%}
... {% if name == 'John' -%}
... Hi John
... {% endif %}
... {%- endmacro -%}
... Hello World!
... {{print_if_john('Foo')-}}
... {{print_if_john('Foo2')-}}
... {{print_if_john('John')-}}
... ''')
>>> t.render()
u'Hello World!\nHi John\n'
>>> print t.render()
Hello World!
Hi John

请注意,您仍然可以在 {{...}} block 中使用换行符和其他空格。

我从 {% endif %} block 中删除了初始的 -,因为当您从 {{..}} 中删除换行符时> block ,您希望在实际打印 Hi John 行时添加一个。这样,多个 print_if_john('John') 调用仍然会得到它们的行分隔符。

完整模板,从演示 session 中解脱出来:

{% macro print_if_john(name) -%}
{% if name == 'John' -%}
Hi John
{% endif %}
{%- endmacro -%}
Hello World!
{{print_if_john('Foo')-}}
{{print_if_john('Foo2')-}}
{{print_if_john('John')-}}

关于Python Jinja2 调用宏导致(不希望的)换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39626767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com