引言¶
这是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
类,在运行时你还需要安装setuptools或distribute。
安装¶
你有多种方法来安装Jinja2。如果你不确定怎么做,请用Python egg或tarball。
作为一个Python egg(通过easy_install)¶
你可以用easy_install或pip安装最新的版本的Jinja2:
easy_install Jinja2
pip install Jinja2
这将在你的Python安装的site-packages目录安装一个Jinja2 egg 。
从源码压缩包安装¶
- 从这个下载页面下载最新的压缩包
- 解压这个压缩包
python setup.py install
注意,你必须安装setuptools或者distribute;更倾向后者。
这会在你 Python 安装的 site-packages 目录安装 Jinja2 。
安装开发版本¶
- 安装git
-
git clone git://github.com/mitsuhiko/jinja2.git
-
cd jinja2
-
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的语法。