Jinja2
本文全文都来自:欢迎来到 Jinja2 — Jinja2 2.7 documentation
简介
jinja2 是一个模仿 Django 模板语言而重新开发的模板引擎,因为 Django 模板引擎限制比较多,因此有人开发出了 jinja2 这个库。所以如果你比较熟悉 Django 模板,那么 jinja2 你也很快就能了解。
安装
pip install Jinja2
基本使用
from jinja2 import Template
# 使用字符串,创建一个模板。模板包含了一个变量 {
{ name }}
temp = Template("<p>{
{ name }}</p>")
# 给模板传递变量,并渲染
content = temp.render(name="Hello") # 可以传递关键字参数
# content = temp.render({"name": "Hello"}) # 也可以传递字典类型
print(content)
{ {}}是用来在模板中声明变量的。模板自带了一个render()函数,可以给模板传递变量(context,也叫上下文变量),然后渲染它的内容。
Template 对象
模板对象, 就是我们上面用到的:
from jinja2 import Template
temp = Template("<p>{
{ name }}</p>")
content = temp.render(name="Hello")
print(content)
比较大的模板文件,可以使用生成器,来减少内存压力:
from jinja2 import Template
temp = Template("{
{ name }}")
gen = temp.generate(name="Wang") # 返回的是生成器
for g in gen:
print(g) # 渲染后的内容
Template 对象常见的属性和方法:
globals该模板的全局变量字典。修改这个字典是不安全的,因为它可能与其它模板或加载这个模板的环境共享这个全局字典。
name模板的加载名。如果模板是从字符串加载的,这个值为 None 。
filename模板文件的文件名,如果不是从文件中加载的,这个值为 None 。
render([context])根据传递的上下文,来渲染模板
generate([context])和
render类似。如果一个模板文件很大,我们可以使用这个函数,来返回一个生成器缓解内存压力。然后迭代这个生成器,来获取渲染后的内容。
stream([context])和 generate() 一样,也能渲染模板,只不过返回一个
TemplateStream对象。
TemplateStream 对象
当我们对 Template 对象使用 .stream() ,就可以渲染模板并返回一个模板流。它有两个方法:
disable_buffering()禁用输出时缓存
dump(fp, encoding=None, errors='strict')它可以将整个数据流保存到文件中,譬如:
Template('Hello { { name }}!').stream(name='foo').dump('hello.html')
Environment 对象
除了上面我们介绍的直接使用 Template 对象,我们还可以使用 Environment 对象,来保存一些配置,譬如:
from jinja2 import Environment, PackageLoader, Template
# 声明一个 package 加载器,会自动去 temp 这个 python包下的 templates 文件夹找所有的文件,即:./temp/templates/*.*
loader = PackageLoader("temp", "templates")
env = Environment(loader=loader) # 生成环境
template = env.get_template("test.html") # 加载某个文件,会从:./temp/templates/ 路径下自动查找这个 test.html
print(template.render(name="ahha"))
Environemt 的好处是,可以保存一些配置,以后所有使用这个环境所获取的模板,都会统一使用这个配置。
我们可以通过
env.get_template()来获取某个模板对象,然后通过template_obj.render(context)来渲染模板。
Environment 参数:
- block_start_string
- 声明 block 时的起始字符串,默认:
'{%'. (所谓 block,可以看作一个代码块,譬如:{% if 3 ==3 %} ... {% endif %})- block_end_string
- 声明 block 时的结束字符串,默认:
'%}'.- variable_start_string
- 声明 变量 时的起始字符串,默认:
'{ {'.- variable_end_string
- 声明 变量 时的结尾字符串,默认:
'}}'.- comment_start_string
- 声明 注释 时的起始字符串,默认:
'{#'.- comment_end_string
- 注释的结尾字符串:
'#}'.- line_statement_prefix
- 行语句的起始字符, 模板中以此字符开头的行, 会被当成语句执行 行语句.
- line_comment_prefix
- 注释的起始字符,模板中如果以此字符开头,会被当成注释(上面我们说过默认的注释是{# #}): See also 行语句.
- newline_sequence
- 为序列开启新行。必须是
'\r','\n'or'\r\n'. 默认:'\n'- extensions
- 扩展插件
- autoescape
- 如果设置成 True,会自动转义一些特殊字符
- loader
- 模板加载器
- auto_reload
- 如果模板更改,会自动重新加载模板(为了性能,最好设置成 False)
Environment 对象的一些属性:

Jinja2是一个灵活的Python模板引擎,模仿Django模板语言设计,适用于生成HTML、XML等静态页面。它提供了丰富的语法,如变量、过滤器、测试、控制结构、宏和继承等。通过`Template`对象或`Environment`对象进行模板渲染,支持自定义过滤器和测试函数。Jinja2还有多种加载器,如FileSystemLoader、PackageLoader等,方便从不同源加载模板。
最低0.47元/天 解锁文章
4352

被折叠的 条评论
为什么被折叠?



