Jinja (template engine)
This article may rely excessively on sources too closely associated with the subject, potentially preventing the article from being verifiable and neutral. (January 2020) (Learn how and when to remove this template message) |
| Original author(s) | Armin Ronacher |
|---|---|
| Initial release | July 17, 2008[1] |
| Stable release | 2.11.2
/ April 13, 2020[1] |
| Repository | |
| Written in | Python |
| Type | Template engine |
| License | BSD License |
| Website | palletsprojects |
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.
The Jinja template engine allows customization of tags,[2] filters, tests, and globals.[3] 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 [4] and it is also used by Ansible [5] and Trac.
Features[edit]
Some of the features of Jinja are:[6]
- sandboxed execution
- automatic HTML escaping to prevent cross-site scripting (XSS) attacks
- template inheritance
- compiles down to the optimal Python code just-in-time
- optional ahead-of-time template compilation
- easy to debug (for example, line numbers of exceptions directly point to the correct line in the template)
- configurable syntax
Jinja, like Smarty, also ships with an easy-to-use filter system similar to the Unix pipeline.
Example[edit]
Here is a small example of a template file example.html.jinja:[7]
<!DOCTYPE html>
<html>
<head>
<title>{{ variable|escape }}</title>
</head>
<body>
{%- for item in item_list %}
{{ item }}{% if not loop.last %},{% endif %}
{%- endfor %}
</body>
</html>
and templating code:
from jinja2 import Template
with open('example.html.jinja') as f:
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 <unsafe> data</title>
</head>
<body>
1,
2,
3,
4,
5,
6
</body>
</html>
Sources[edit]
- ^ a b "Jinja2 Release History". Retrieved 24 June 2020.
- ^ "Extensions". Jinja2 Documentation (2.8-dev). Retrieved 2015-05-26.
- ^ "Extensions". Jinja2 Documentation (2.8-dev). Retrieved 2015-05-26.
- ^ DuPlain, R. (2013). Instant Flask Web Development. Packt Publishing. p. 30. ISBN 978-1-78216-963-5. Retrieved 2015-05-26.
- ^ https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html
- ^ "Welcome | Jinja2 (The Python Template Engine)". palletsprojects.com/p/jinja.
- ^ Ronacher, Armin. "Template Designer Documentation". Jinja2 Documentation. Retrieved 7 January 2016.
A Jinja template doesn’t need to have a specific extension: .html, .xml, or any other extension is just fine.
External links[edit]
- Jinja website
- Jinja2 on Python pypi
- jinja2 on GitHub

