先创建一个简单的 jinja_demo.py
:
from jinja2 import Environment, FileSystemLoader
import os.path
# __file__ 就是本文件的名字
# 得到放置模板的目录
path = '{}/templates/'.format(os.path.dirname(__file__))
# 创建一个加载器, jinja2 会从这个目录中加载模板
loader = FileSystemLoader(path)
# 用加载器创建一个环境, 有了它才能读取模板文件
env = Environment(loader=loader)
# 调用 get_template() 方法加载模板并返回
template = env.get_template('demo.html')
# 用 render() 方法渲染模板
# 可以传递参数
ns = list(range(3))
us = [
{
'id': 1,
'name': 'gua',
},
{
'id': 2,
'name': '瓜',
},
]
print(template.render(name='gua', numbers=ns, users=us))
编写 demo.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jinja demo</title>
</head>
<body>
<!-- 变量替换 -->
<h1>{{ name }}</h1>
<!-- 循环 -->
{% for n in numbers %}
<span class="number">{{ n }}</span>
{% endfor %}
<!-- 循环加对象/字典访问 -->
<div class="user-container">
{% for u in users %}
<div class="user-cell">
<span>{{ u.name }}</span>
<span>{{ u.id }}</span>
</div>
{% endfor %}
</div>
</body>
</html>
渲染成以下的 HTML 代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jinja demo</title>
</head>
<body>
<!-- 变量替换 -->
<h1>gua</h1>
<!-- 循环 -->
<span class="number">0</span>
<span class="number">1</span>
<span class="number">2</span>
<!-- 循环加对象/字典访问 -->
<div class="user-container">
<div class="user-cell">
<span>gua</span>
<span>1</span>
</div>
<div class="user-cell">
<span>瓜</span>
<span>2</span>
</div>
</div>
</body>
</html>
所以操作都和 Django 的模板引擎非常类似。