Jinja (template engine)

Last updated
Jinja
Original author(s) Armin Ronacher
Initial releaseJuly 17, 2008;16 years ago (2008-07-17) [1]
Stable release
3.1.6 [2]   OOjs UI icon edit-ltr-progressive.svg / 5 March 2025;43 days ago (5 March 2025)
Repository
Written in Python
Type Template engine
License BSD License
Website palletsprojects.com/p/jinja/   OOjs UI icon edit-ltr-progressive.svg

Jinja is a web template engine for the Python programming language. It was created by Armin Ronacher and is licensed under a BSD License. Jinja is similar to the Django template engine, but provides Python-like expressions while ensuring that the templates are evaluated in a sandbox. It is a text-based template language and thus can be used to generate any markup as well as source code.

Contents

The Jinja template engine allows customization of tags, [3] filters (for formatting or transforming values [4] ), tests (for evaluating conditions [4] ), and globals. [5] Also, unlike the Django template engine, Jinja allows the template designer to call functions with arguments on objects. Jinja is Flask's default template engine [6] and it is also used by Ansible, [7] Trac, and Salt. [8] It is also used to make SQL macros, for example for use with dbt. [9]

Features

Some of the features of Jinja are: [10]

Jinja, like Smarty, also ships with an easy-to-use filter system similar to the Unix pipeline.

Syntax

The syntax for printing output in Jinja is using the double curly braces, for example {{ Hello, World! }}.

Statements which set variables in jinja or those which do not have an output can be wrapped within {% and %}, using the set keyword. For example {%setfoo=42%} sets a variable called foo with a value of 42.

Similar to above, comments in jinja can be written using a number sign (#) instead of a percentage (%), for example, {# helpful comment #}.

The syntax for creating a filter in Jinja is a vertical bar (|), for example {{ variable|filter }}. A variable can have multiple filters, for example {{ variable|filter|filter }}). [4]

The syntax for creating a test in Jinja is the keyword is as well as the conditions for evaluating the validity of a test, such as for example {%ifvariableisdivisibleby10%}do something{%endif%}). [4]

For loops can be used to iterate over sequences, while retaining their object properties. The following example demonstrates iterating over a list of users with username and password fields.

{%foruserinusers%}{{user.username}}{{user.password}}{%endfor%}

Although break and continue are not allowed inside loops, sequences can be filtered.

Example

Here is a small example of a template file example.html.jinja: [11]

<!DOCTYPE html><html><head><title>{{variable|escape}}</title></head><body>{%- foriteminitem_list%}{{item}}{%ifnotloop.last%},{%endif%}{%- endfor%}</body></html>

and templating code:

fromjinja2importTemplatewithopen("example.html.jinja")asf:tmpl=Template(f.read())print(tmpl.render(variable="Value with <unsafe> data",item_list=[1,2,3,4,5,6]))

This produces the HTML string:

<!DOCTYPE html><html><head><title>Value with &lt;unsafe&gt; data</title></head><body>     1,     2,     3,     4,     5,     6   </body></html>

Note the minus sign (-) after the tag {%: If you add a minus sign (-) to the start or end of a block (e.g. a For tag), a comment, or a variable expression, the whitespaces before or after that block will be removed. [12]

References

  1. "Jinja2 Release History" . Retrieved 24 June 2020.
  2. "Release 3.1.6". 5 March 2025. Retrieved 25 March 2025.
  3. "Extensions". Jinja2 Documentation (2.8-dev). Retrieved 2015-05-26.
  4. 1 2 3 4 "Jinja built-in filters and tests (like Django filters)". www.webforefront.com. Retrieved 2023-08-14.
  5. "Extensions". Jinja2 Documentation (2.8-dev). Retrieved 2015-05-26.
  6. DuPlain, R. (2013). Instant Flask Web Development. Packt Publishing. p. 30. ISBN   978-1-78216-963-5 . Retrieved 2015-05-26.
  7. "Templating (Jinja2) — Ansible Documentation".
  8. "Understanding Jinja". docs.saltproject.io.
  9. Jinja and macros | dbt Developer Hub
  10. "Welcome | Jinja2 (The Python Template Engine)". palletsprojects.com/p/jinja.
  11. Ronacher, Armin. "Template Designer Documentation". Jinja Documentation (3.0.x). Retrieved 9 January 2024. A Jinja template doesn't need to have a specific extension: .html, .xml, or any other extension is just fine.
  12. "Template Designer Documentation — Jinja Documentation (3.0.x)". jinja.palletsprojects.com. Retrieved 2024-01-09.