Whitespace Suppression
Block tags that, when rendered, contain only whitespace are suppressed by default.
from liquid import Template
template = Template("Hello{% if true %}\n\n{% endif %}World!")
print(template.render())
HelloWorld!
That is unless the block contains an output statement ({{ .. }}
) or {% echo %}
tag, even if the result of that output is whitespace only.
from liquid import Template
template = Template("Hello{% if true %}{{ '\n\n' }}{% endif %}World!")
print(template.render())
Hello
World!
Disabling Whitespace Suppression
New in version 1.10.0
Automatic suppression of whitespace only blocks can be disabled by subclassing liquid.Environment
and setting the class attribute render_whitespace_only_blocks
to True
. Templates rendered from such an environment will output blocks that contain whitespace only.
from liquid import Environment
class MyEnvironment(Environment):
render_whitespace_only_blocks = True
env = MyEnvironment()
template = env.from_string("Hello{% if true %}\n\n{% endif %}World!")
print(template.render())
Hello
World!
Selective Whitespace Suppression
New in version 1.10.0
render_whitespace_only_blocks
affects all block tags. You can disable automatic whitespace suppression for one or more tags by registering custom versions of those tags with the force_output
class attribute set to True
.
This example disables whitespace suppression for {% unless %}
tags, but keeps it active for {% for %}
, {% if %}
and {% case %}
tags.
from liquid import Environment
from liquid.builtin.tags.unless_tag import UnlessNode
from liquid.builtin.tags.unless_tag import UnlessTag
class MyUnlessNode(UnlessNode):
force_output = True
class MyUnlessTag(UnlessTag):
node_class = MyUnlessNode
env = Environment()
env.add_tag(MyUnlessTag)
template = env.from_string(
"{% for x in (1..3) %}"
"{{ x }}"
"{% unless forloop.last %}\n{% endunless %}"
"{% endfor %}"
)
result = template.render() # "1\n2\n3"