[Flask] Jinja 2.10 released

David Lord davidism at gmail.com
Wed Nov 8 16:00:47 EST 2017


We've released Jinja 2.10! https://github.com/pallets/jinja/releases/tag/2.10

Major changes include:

- A `NativeEnvironment` that renders Python types instead of strings.
http://jinja.pocoo.org/docs/2.10/nativetypes/
- A `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
- The `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 or upgrade with pip:

    pip install -U Jinja2

## Changelog

- Added a new extension node called `OverlayScope` which can be used
to create an unoptimized scope that will look up all variables from a
derived context.
- Added an `in` test that works like the in operator.  This can be
used in combination with `reject` and `select`.
- Added `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.
- Added ``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)
- Added a `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.
- Added a `trimmed` modifier to ``{% trans %}`` to strip linebreaks
and surrounding whitespace. Also added a new policy to enable this for
all `trans` blocks.
- The `random` filter is no longer incorrectly constant folded and
will produce a new random choice each time the template is rendered.
(#478)
- Added a `unique` filter. (#469)
- Added `min` and `max` filters. (#475)
- Added tests for all comparison operators: `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)
- Add `reverse` argument for `dictsort` filter. (#692)
- Add a `NativeEnvironment` that renders templates to native Python
types instead of strings. (#708)
- Added filter support to the block `set` tag. (#489)
- `tojson` filter marks output as safe to match documented behavior. (#718)
- Resolved a bug where getting debug locals for tracebacks could
modify template context.
- Fixed a bug where having many ``{% elif ... %}`` blocks resulted in
a "too many levels of indentation" error.  These blocks now compile to
native ``elif ..:`` instead of ``else: if ..:`` (#759)

---

Finally, if you want to, please retweet this to spread the word to
more developers:

https://twitter.com/davidism/status/928359324904169473

Thank you to the community for your continued support and contributions!


More information about the Flask mailing list