Python Jinja2调用宏导致(不合需要的)换行符

时间:2016-09-21 21:20:28

标签: python macros jinja2

我的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/

测试了此模板和结果代码

1 个答案:

答案 0 :(得分:2)

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

如果您要加入这些广告或在这些广告块中使用-,新线就会消失:

>>> 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

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

我从-块中移除了初始{% endif %},因为当您从{{..}}块中删除换行符时,您希望中添加一行你确实打印了Hi John行。这样,多个print_if_john('John')调用仍将获得其行分隔符。

完整模板,从演示会话中解放出来:

{% 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')-}}