我的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/
测试了此模板和结果代码答案 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')-}}