Jinja2
| 原作者 | Armin Ronacher |
|---|---|
| 首次发布 | 2008年7月17日[1] |
| 当前版本 |
|
| 源代码库 | |
| 编程语言 | Python |
| 类型 | 模板引擎 |
| 许可协议 | BSD许可证 |
| 网站 | palletsprojects |
Jinja2是为Python提供的一个功能齐全的模板引擎。Jinja2提供了对Unicode的完全支持,以及一个可选的集成沙盒运行环境。它使用BSD许可证。
Jinja模板引擎允许对标签[3]、过滤器(用来格式化或变换值[4])、测试(用来评估条件[4])和全局变量[5]。不像Django模板引擎,Jinja允许模板设计者在对象上调用具有参数的函数。Jinja是Flask还有Home Assistant自动化的缺省模板引擎[6][7]。它还被用于Ansible[8]、Trac和Salt[9]。它也用于制作SQL宏,例如dbt[10]。
主要特征:
[编辑]Jinja就像Smarty,还备有类似Unix管道的易用的过滤系统。
语法
[编辑]打印输出的语法使用双花括号,例如{{ Hello, World! }}。
设置变量的语句或没有输出的语句可以包装在{% and %}之中,例如{% set foo = 42 %},这里使用了set关键字,它设置叫做foo的变量具有值42。
注释可以可以包装在{# and #}之中,例如{# helpful comment #}。
建立过滤器的语法是竖线(|),例如{{ variable|filter }}。一个变量可以有多个过滤器,例如{{ variable|filter|filter }}[4]。
建立测试的语法是关键字is,以及评估一个测试有效性的条件,例如{% if variable is divisibleby 10 %}do something{% endif %}[4]。
可以使用For循环来迭代于序列之上,同时保持它们的对象属性。下面的例子展示迭代于一个列表users之上,它具有username和password字段。
{% for user in users %}
{{ user.username }}
{{ user.password }}
{% endfor %}
尽管break和continue不允许出现在循环中,序列是可以过滤的。
例子
[编辑]下面的小例子是一个模板文件example.html.jinja[11]:
<!DOCTYPE html>
<html>
<head>
<title>{{ variable|escape }}</title>
</head>
<body>
{% for item in item_list -%}
{{ item }}{% if not loop.last %}, {% endif %}
{%- endfor %}
</body>
</html>
和一个模板代码:
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]
))
它产生HTML字符串:
<!DOCTYPE html>
<html>
<head>
<title>Value with <unsafe> data</title>
</head>
<body>
1, 2, 3, 4, 5, 6
</body>
</html>
注意如果向一个块(比如这里的for标签)、注释或变量表达式的开头或结尾增加一个减号(-),则在这个块前面或后面的空白都会删除[12]。
引用
[编辑]- ^ Jinja2 Release History. [24 June 2020]. (原始内容存档于2018-10-03).
- ^ Release 3.1.6. 2025年3月5日 [2025年3月25日].
- ^ Extensions. Jinja2 Documentation (2.8-dev). [2015-05-26].
- ^ 4.0 4.1 4.2 4.3 Jinja built-in filters and tests.
- ^ Extensions. Jinja2 Documentation (2.8-dev). [2015-05-26].
- ^ DuPlain, R. Instant Flask Web Development. Packt Publishing. 2013: 30 [2015-05-26]. ISBN 978-1-78216-963-5.
- ^ Assistant, Home. Templating. Home Assistant. [2025-10-16] (英语).
- ^ Templating (Jinja2) — Ansible Documentation.
- ^ Understanding Jinja. docs.saltproject.io.
- ^ Jinja and macros | dbt Developer Hub
- ^ Ronacher, Armin. Template Designer Documentation. Jinja Documentation (3.0.x). [9 January 2024].
A Jinja template doesn’t need to have a specific extension: .html, .xml, or any other extension is just fine.
- ^ Template Designer Documentation — Jinja Documentation (3.0.x). jinja.palletsprojects.com. [2024-01-09].