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) |
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
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
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
- ^ 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
- Jinja website
- Jinja2 on Python pypi
- jinja2 on GitHub