Permalink: 2019-06-11 00:00:00+08:00 by duke in Flask tags: web

今天看了下 jinja 的文档,做一下总结。其实也是粗略过了一遍。一是因为之前多次查过jinja2的语法和一些用法。二是,细看的话,其实很多东西,看了也记不住,只有用的时候才能记得住。

start jinja

安装

pip install Jinja2

Basic API Usage

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

最基本的用法就是这么简单,但是实际使用中这些是不够的

API

Environment 是 jinja 的一个核心对象,Environment 这个词用的真的很贴切,把使用 jinja 的环境都集成到这个对象里了。

class jinja2.Environment([options])

Environment 有很多 options,最重要的是loader,loader 是从哪里加载模板,比如文件系统。说白了,就是模板是在哪里的。 是在哪个目录下,还是在那个包了的。FileSystemLoader就是从文件系统中找模板文件。

get_template 这个方法,就在FileSystemLoader所指定的目录中,设置具体是哪个模板文件。

render方法,通过传递参数,渲染模板。

以上就是常规使用 jinja 的方法了

举例如下:

py文件:

import os
import sys
from jinja2 import Environment, FileSystemLoader

cwd = os.path.dirname(os.path.abspath(sys.argv[0]))

env = Environment(loader=FileSystemLoader(cwd))
foo_html_template = env.get_template("foo.html")
foo_html = foo_html_template.render(foo="FOO", bar='<')
print(foor_html)

foo_html:

foo: {{ foo }}
bar: {{ bar|e }}

其中,e是转义 filter

结果为:

foo: FOO
bar: &lt;

模板语法和语义

这个方面也不想多写了。就像是 python 的库函数一样。是必须要知道的,文档里面已经写的很清楚了, 自己总结总觉得都不太好,因为不可能有文档全面和准确,所以就参考文档吧

参考

https://jinja.palletsprojects.com/en/2.11.x/