jinja2_workarounds offers an extension for jinja2 that works around a long standing issue1
where include does not preserve correct indentation for multi-line includes. Simply add the
jinja2_workarounds.MultiLineInclude extension to your environment and use the indent content directive to
correctly indent your multi-line includes.
pip install jinja2_workarounds
# text.j2
this
is
some
text# example.j2
example:
{% include 'text.j2' indent content %}is then rendered as
example:
this
is
some
text
compared to jinja2's default include which would result in
example:
this
is
some
text
MultiLineInclude is compatible with custom block_start_string and block_end_string. It also works with
the advanced features of jinja2's include statement. The following variants are all supported and work as
expected
{% include 'missing.j2' ignore missing indent content %} # handle missing templates
{% include ['foo.j2', 'bar.j2'] indent content %} # multiple alternative templates
{% include 'child.j2' without context %} # include child with/without content
{%- include 'child.j2' +%} # include with custom whitespace control