引言

这是Jinja2通用模板语言的文档。Jinja2是一个Python库,它设计的目标是灵活、快速和安全。

如果你接触过其它基于文本的模板语言,比如Smarty或Django,那么你应该对Jinja2感觉宾至如归。通过坚持Python的原则和给模板环境添加有用的功能,它对设计者和开发者都很友好。

前提

Jinja2工作于Python 2.6.x、2.7.x和>= 3.3。如果你正在使用Python 3.2,你可以使用旧版本的Jinja2(2.6),因为Python 3.2的支持在Jinja2 2.7版本中被删除 。

如果你希望使用PackageLoader类,在运行时你还需要安装setuptoolsdistribute

安装

你有多种方法来安装Jinja2。如果你不确定怎么做,请用Python egg或tarball。

作为一个Python egg(通过easy_install

你可以用easy_installpip安装最新的版本的Jinja2:

easy_install Jinja2
pip install Jinja2

这将在你的Python安装的site-packages目录安装一个Jinja2 egg 。

从源码压缩包安装

  1. 从这个下载页面下载最新的压缩包
  2. 解压这个压缩包
  3. python setup.py install

注意,你必须安装setuptools或者distribute;更倾向后者。

这会在你 Python 安装的 site-packages 目录安装 Jinja2 。

安装开发版本

  1. 安装git
  2. git clone git://github.com/mitsuhiko/jinja2.git
  3. cd jinja2
  4. ln -s jinja2 /usr/lib/python2.X/site-packages

作为步骤4的替代方法,你也可以执行python setup.py develop,这将通过distribute安装在开发模式下的包。这还有一个优点是C扩展模块会被编译。

MarkupSafe依赖

Jinja2 2.7版本开始依赖MarkupSafe模块。如果你通过pip或者easy_install安装Jinja2,它将自动为你安装。

API的基本用法

本节简要介绍Jinja2模板的Python API 。

创建和渲染模板最基本的方式是通过Template然而,如果你的模板不是从字符串而是从文件系统或别的数据源加载,这不是推荐的方式:

>>> from jinja2 import Template
>>> template = Template('Hello {{ name }}!')
>>> template.render(name='John Doe')
u'Hello John Doe!'

通过创建Template的一个实例,你会得到一个新的模板对象,它提供一个名为render()的方法,该方法在用字典或关键字参数调用时将填充模板。传递给模板的字典或关键字参数叫做所谓的模板“上下文”。

这里你可以看到,Jinja2内部使用unicode并且返回值也是unicode字符串。所以确保你的应用里也确实使用unicode。

Python 3实验性的支持

Jinja 2.7给Python >=3.3带来实验性的支持。这意味着,所有的单元测试在新版本上都通过,但是可能仍有一些小bug和不一致的行为。如果你发现任何bug,请在Jinja bug tracker提供反馈。

还请记住本文档是为Python 2编写的,所以你必须自己把示例代码转换为Python 3的语法。