Rag*_*ugu 4 python macros jinja2
我的 JINJA2 模板如下所示。
\n\n{% macro print_if_john(name) -%}\n{% if name == \'John\' -%}\n Hi John\n{%- endif %}\n{%- endmacro %}\nHello World!\n{{print_if_john(\'Foo\')}}\n{{print_if_john(\'Foo2\')}}\n{{print_if_john(\'John\')}}\nRun Code Online (Sandbox Code Playgroud)\n\n结果输出是
\n\nHello\xe2\x80\xa2World!\n\n\nHi\xe2\x80\xa2John\nRun Code Online (Sandbox Code Playgroud)\n\n我不想要“Hello World!”和“Hi John”之间的 2 个换行符。看起来当对宏的调用导致宏没有输出时,JINJA 无论如何都会插入换行符。有什么方法可以避免这种情况吗?我在宏本身的调用中添加了减号,但这没有帮助。
\n\n\n换行符来自{{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
Run Code Online (Sandbox Code Playgroud)
请注意,您仍然可以在块内使用换行符和其他空格{{...}}。
-我从块中删除了首字母{% endif %},因为当您从块中删除换行符时{{..}},您希望在实际打印该行时添加一个换行符Hi John。这样多个print_if_john('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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |