Jinja2 Documentation

# Jinja

« Frequently Asked Questions | Changelog

# Changelog

## Version 2.1

(codename to be selected, release date yet unknown)

- fixed a bug with nested loops and the special loop variable. Before the change an inner loop overwrote the loop variable from the outer one after iteration.
- fixed a bug with the i18n extension that caused the explicit pluralization block to look up the wrong variable.
- fixed a limitation in the lexer that made `{{ foo.0.0 }}` impossible.
- index based subscribing of variables with a constant value returns an undefined object now instead of raising an index error. This was a bug caused by eager optimizing.
- the i18n extension looks up foo.ugettext now followed by foo.gettext if an translations object is installed. This makes dealing with custom translations classes easier.
- fixed a confusing behavior with conditional extending. loops were partially executed under some conditions even though they were not part of a visible area.
- added sort filter that works like dictsort but for arbitrary sequences.
- fixed a bug with empty statements in macros.
- implemented a bytecode cache system. (Bytecode Cache)
- the template context is now weakref-able
- inclusions and imports “with context” forward all variables now, not only the initial context.

## Version 2.0

(codename jinjavitus, released on July 17th 2008)

- the subscribing of objects (looking up attributes and items) changed from slightly. It’s now possible to give attributes or items a higher priority by either using dot-notation lookup or the bracket syntax. This also changed the AST slightly. Subscript is gone and was replaced with `Getitem` and `Getattr`.

  For more information see the implementation details.

- added support for preprocessing and token stream filtering for extensions. This would allow extensions to allow simplified gettext calls in template data and something similar.

- added `jinja2.environment.TemplateStream.dump()`.

- added missing support for implicit string literal concatenation. `{{ "foo" "bar" }}` is equivalent to `{{ "foobar" }}`

- else is optional for conditional expressions. If not given it evaluates to false.

- improved error reporting for undefined values by providing a position.

- filesizeformat filter uses decimal prefixes now per default and can be set to binary mode with the second parameter.

- fixed bug in finalizer

## Version 2.0rc1

(no codename, released on June 9th 2008)

- first release of Jinja2