Jinja2简介
Jinja 是一种快速的、富有表现力的、可扩展的模板引擎。模板中的特殊占位符允许编写类似于 Python 语法的代码,然后向模板传递数据来呈现出最终的文档。
特征
-
模板可以被继承或者被包含。
-
可以在模板中定义和导入宏(Macro,批量处理。根据一系列预定义的规则替换一定的文本模式)。
<!--宏定义--> {% macro input(name, type='text', value='') -%} <input type="{ { type }}" name="{ { name }}" value="{ { value|e }}"> {% endmacro %}
- 宏定义要加
macro
,结束时要用endmacro
。宏名称为input
,有三个参数type
、name
、value
。
<!--调用宏--> <p>用户名:{ { input('username') }}</p> <p>密码:{ { input('password', type='password') }}</p>
- 宏定义要加
-
HTML 模板可以使用自动转义来防止 XSS 来自不信任的用户输入。
- XSS 攻击 - 跨站脚本攻击,攻击者恶意制造的网页程序。通常指利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行。
-
沙箱可以安全地呈现不受信任的模板。
-
AsyncIO(异步IO) 支持生成模板和调用异步函数。
-
I18N 支持 Babel。
-
模板即时编译为优化的 Python 代码并缓存,或者可以提前编译。
-
异常指向模板中的正确行以使调试更容易。
-
可扩展的过滤器、测试、函数、甚至语法。
Jinja的理念
如果可能的话,应用程序的逻辑属于 Python,但它不应该因为过多地限制功能而使得模板设计者的工作变得困难。
Jinja2使用
继承
模板文件 model.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv