跳转到内容

Jinja2

维基百科,自由的百科全书
Jinja
原作者Armin Ronacher(英语:Armin Ronacher)
首次发布2008年7月17日,​18年前​(2008-07-17)[1]
当前版本
  • 3.1.6(2025年3月5日;穩定版本)[2]
編輯維基數據鏈接
源代码库 編輯維基數據鏈接
编程语言Python
类型模板引擎
许可协议BSD许可证
网站palletsprojects.com/p/jinja/ 编辑维基数据

Jinja2是为Python提供的一个功能齐全的模板引擎。Jinja2提供了对Unicode的完全支持,以及一个可选的集成沙盒运行环境。它使用BSD许可证。

Jinja模板引擎允许对标签(英语:Tag (programming))[3]、过滤器(英语:Filter (software))(用来格式化或变换值[4])、测试(用来评估条件[4])和全局变量[5]。不像Django模板引擎,Jinja允许模板设计者在对象上调用具有参数的函数。Jinja是Flask还有Home Assistant自动化的缺省模板引擎[6][7]。它还被用于Ansible[8]、Trac和Salt(英语:Salt (software))[9]。它也用于制作SQL宏,例如dbt(英语:data build tool)[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 &lt;unsafe&gt; data</title>
  </head>
  <body>
  1, 2, 3, 4, 5, 6
  </body>
</html>

注意如果向一个块(比如这里的for标签)、注释或变量表达式的开头或结尾增加一个减号(-),则在这个块前面或后面的空白都会删除[12]。

引用

[编辑]
  1. ^ Jinja2 Release History. [24 June 2020]. (原始内容存档于2018-10-03). 
  2. ^ Release 3.1.6. 2025年3月5日 [2025年3月25日]. 
  3. ^ Extensions. Jinja2 Documentation (2.8-dev). [2015-05-26]. 
  4. ^ 4.0 4.1 4.2 4.3 Jinja built-in filters and tests. 
  5. ^ Extensions. Jinja2 Documentation (2.8-dev). [2015-05-26]. 
  6. ^ DuPlain, R. Instant Flask Web Development. Packt Publishing. 2013: 30 [2015-05-26]. ISBN 978-1-78216-963-5. 
  7. ^ Assistant, Home. Templating. Home Assistant. [2025-10-16] (英语). 
  8. ^ Templating (Jinja2) — Ansible Documentation. 
  9. ^ Understanding Jinja. docs.saltproject.io. 
  10. ^ Jinja and macros | dbt Developer Hub
  11. ^ 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. 
  12. ^ Template Designer Documentation — Jinja Documentation (3.0.x). jinja.palletsprojects.com. [2024-01-09]. 

外部链接

[编辑]