Jinja2 与 Jinja1 在 API 使用和模板语法上最为兼容。下面的列表解释了 Jinja1 和 Jinja2 的区别。
### API[](http://docs.jinkan.org/docs/jinja2/switching.html#api "Permalink to this headline")
加载器
Jinja2 使用不同的加载器 API 。因为模板的内部表示更改,不再支持 memcached 这样的外部缓存系统。模板的内存开销与常规的 Python 模块相当,外部缓存不能 带来优势。如果你以前使用了一个自定义的加载器,请阅读 [*loader API*](http://docs.jinkan.org/docs/jinja2/api.html#loaders) 部分。
从字符串加载模板
在过去,在默认环境配置中使用 jinja.from_string 从字符串生成模板是可能 的。 Jinja2 提供了一个 Template 类来用于做同样的事情,但是需要 可选的额外配置。
自动 Unicode 转换
Jinja1 执行把字节串从一个给定编码到 unicode 对象的自动转换。这个转换不再 被实现,因为它与大多数使用常规 Python ASCII 字节串到 Unicode 转换的库不 一致。一个由 Jinja2 驱动的应用 *必须* 在内部的每个地方都使用 unicode 或 确保 Jinja2 只会被传递 unicode 字符串。
i18n
Jinja1 使用自定义的国际化翻译器。 i18n 现在作为 Jinja2 的一个扩展,并且 使用更简单、更 gettext 友好的接口,并且支持 babel 。更多细节见 [*i18n 扩展*](http://docs.jinkan.org/docs/jinja2/extensions.html#i18n-extension) 。
内部方法
Jinja1 在环境对象上暴露了诸如 call_function 、 get_attribute 等内部 方法。当它们被标记为一个内部方法,则可以覆盖它们。 Jinja2 并没有等价的 方法。
沙箱
Jinja1 默认运行沙箱模式。实际上只有少数应用使用这一特性,所以这在 Jinja2 中是可选的。更多关于上下执行的细节见 SandboxedEnvironment 。
上下文
Jinja1 有一个上下文栈存储传递到环境的变量。在 Jinja2 中有一个类似的 对象,但它不允许修改也不是单例的。由于继承是动态的,现在当模板求值时 可能存在多个上下文对象。
过滤器和测试
过滤器和测试现在是常规的函数。不再允许使用工厂函数,且也没有必要。
### 模板[](http://docs.jinkan.org/docs/jinja2/switching.html#id2 "Permalink to this headline")
Jinja2 与 Jinja1 的语法几乎相同。区别是,现在宏需要用小括号包裹参数。
此外, Jinja2 允许动态继承和动态包含。老的辅助函数 rendertemplate 作古, 而使用include 。包含不再导入宏和变量声明,因为采用了新的 import 标签。 这个概念在 [*导入*](http://docs.jinkan.org/docs/jinja2/templates.html#import)文档中做了解释。
另一个改变发生在 for 标签里。特殊的循环变量不再拥有 parent 属性,而 你需要自己给循环起别名。见 [*访问父级循环*](http://docs.jinkan.org/docs/jinja2/tricks.html#accessing-the-parent-loop) 了解更多细节。
- 介绍
- 预备知识
- 安装
- 基本 API 使用
- 实验性的 Python 3 支持
- API
- 基础
- Unicode
- 高层 API
- 自动转义
- 标识符的说明
- 未定义类型
- 上下文
- 加载器
- 字节码缓存
- 实用工具
- 异常
- 自定义过滤器
- 求值上下文
- 自定义测试
- 全局命名空间
- 低层 API
- 元 API
- 沙箱
- API
- 运算符拦截
- 模板设计者文档
- 概要
- 变量
- 过滤器
- 测试
- 注释
- 空白控制
- 转义
- 行语句
- 模板继承
- HTML 转义
- 控制结构清单
- 导入上下文行为
- 表达式
- 内置过滤器清单
- 内置测试清单
- 全局函数清单
- 扩展
- 自动转义扩展
- 扩展
- 添加扩展
- i18n 扩展
- 表达式语句
- 循环控制
- With 语句
- 自动转义扩展
- 编写扩展
- 集成
- Babel 集成
- Pylons
- TextMate
- Vim
- 从其它的模板引擎切换
- Jinja1
- Django
- Mako
- 提示和技巧
- Null-Master 退回
- 交替的行
- 高亮活动菜单项
- 访问父级循环