A very fast and expressive template engine.
This contains a fix for a speed issue with the urlize
filter. urlize
is likely to be called on untrusted user input. For certain inputs some of the regular expressions used to parse the text could take a very long time due to backtracking. As part of the fix, the email matching became slightly stricter. The various speedups apply to urlize
in general, not just the specific input cases.
This fixes an issue in async environment when indexing the result of an attribute lookup, like {{ data.items[1:] }}
.
This is the last version to support Python 2.7 and 3.5. The next version will be Jinja 3.0 and will support Python 3.6 and newer.
NativeEnvironment
that renders Python types instead of strings.
http://jinja.pocoo.org/docs/2.10/nativetypes/
namespace
object that works with {% set %}
. This replaces
previous hacks for storing state across iterations or scopes.
http://jinja.pocoo.org/docs/2.10/templates/#assignments
loop
object now has nextitem
and previtem
attributes, as
well as a changed
method, for the common case of outputting
something as a value in the loop changes. More complicated cases can
use the namespace
object.
http://jinja.pocoo.org/docs/2.10/templates/#for
Install from PyPI with pip:
pip install -U Jinja2
OverlayScope
which can be used to create an unoptimized scope that will look up all variables from a derived context.in
test that works like the in operator. This can be used in combination with reject
and select
.previtem
and nextitem
to loop contexts, providing access to the previous/next item in the loop. If such an item does not exist, the value is undefined.changed(*values)
to loop contexts, providing an easy way of checking whether a value has changed since the last iteration (or rather since the last call of the method)namespace
function that creates a special object which allows attribute assignment using the set
tag. This can be used to carry data across scopes, e.g. from a loop body to code that comes after the loop.trimmed
modifier to {% trans %}
to strip linebreaks and surrounding whitespace. Also added a new policy to enable this for all trans
blocks.random
filter is no longer incorrectly constant folded and will produce a new random choice each time the template is rendered. (#478)unique
filter. (#469)min
and max
filters. (#475)eq
, ne
, lt
, le
, gt
, ge
. (#665)import
statement cannot end with a trailing comma. (#617, #618)indent
filter will not indent blank lines by default. (#685)reverse
argument for dictsort
filter. (#692)NativeEnvironment
that renders templates to native Python types instead of strings. (#708)set
tag. (#489)tojson
filter marks output as safe to match documented behavior. (#718){% elif ... %}
blocks resulted in a "too many levels of indentation" error. These blocks now compile to native elif ..:
instead of else: if ..:
(#759)