Whitespace handling
Normally the literal text between template tags will be output as it is. This
behaviour can be changed by passing a different value to the whitespace
parameter in the constructor. The possible values are:
"keep"
The default behaviour: literal text will be output as it is.
"strip"
Linefeeds and the following indentation in literal text will be ignored:
>>> from ll import ul4c >>> t = ul4c.Template(""" ... <?for i in range(10)?> ... <?print i?> ... ; ... <?end for?> ... """, whitespace="strip") >>> t.renders() '0;1;2;3;4;5;6;7;8;9;'
However trailing whitespace at the end of the line will still be honored.
"smart"
If a line contains only indentation and one tag that isn’t a
print
,printx
orrender
tag, the indentation and the linefeed after the tag will be stripped from the text.Furthermore the additional indentation that might be introduced by a
for
,if
,elif
,else
ordef
block will be ignored. So for example the output of:<?code langs = ["Python", "Java", "Javascript"]?> <?if langs?> <?for lang in langs?> <?print lang?> <?end for?> <?end if?>
will simply be
Python Java Javascript
without any additional empty lines or indentation.
Rendering a template
B
inside an templateA
will reindent the output ofB
to the indentation level of the<?render?>
tag in the templateA
.
It is also possible to specify the whitespace behaviour in the template itself
with the <?whitespace?>
tag, so:
<?whitespace smart?>
anywhere in the template source will switch on smart whitespace handling.
A <?whitespace?>
tag overwrites the whitespace
parameter specified
in the constructor.