模板就是一个简单的文本文件。它可以生成任何基于文本的格式(HTML、XML、CSV、markdown等)。

模板包含变量(在求值时被替换为值)和标签(控制模板的逻辑)。

pongo2是一个模板引擎,类似于jsp

1 特性

1 语法和特性集兼容于Django 1.7,Django模板见官网https://django.readthedocs.io/en/1.7.x/topics/templates.html

2 类C表达式

3 表达式中的复杂函数调用

4 易于创建新的过滤器和标记的API(包括解析参数)

 

 

 5 宏

2 Django模板语言

上面我们讲过,pongo2语法兼容Django模板语法,我们先看一下Django的模板语言

模板就是一个简单的文本文件。它可以生成任何基于文本的格式(HTML、XML、CSV等)。

示例

2.1 变量

 {{ variable }} 

当模板引擎遇到一个变量时,它将计算该变量并将其替换为结果

2.2 过滤器filter

 {{ name|lower }} 

上面过滤器lower的作用是把变量name转为小写字母

带参数的过滤器,作用取bio前30个字符 {{ bio|truncatewords:30 }} 

用逗号和空格连接一个列表 {{ list|join:", " }} 

常用的几个过滤器

1 default,给出变量的默认值, {{ value|default:"nothing" }} 

2 length, {{ value|length }} 

2.3 Tags

格式 {% tag %} 或者 {% tag %} ... tag contents ... {% endtag %} 

常用的几个Tag

1 for

for循环预设了几个在循环中使用的变量,并且,我们如果要使用这些变量,需要首字母大写,比如forloop.First

forloop.counterforloop.counter0forloop.revcounterforloop.revcounter0forloop.firstforloop.lastforloop.parentloop
ifelifelse

3 autoescape

如果定义为on则,在其范围内的变量将进行html转义。

 

2.4 模板继承

我们可以通过模板继承,实现

例如,base.html

child.html

 

3 模板和数据的合并

上面主要讲的是模板的格式、语法等内容。

既然是模板引擎,当然具有渲染数据到模板的功能,下面我们以一个简单的例子进行讲解

1 通过 pongo2.FromString 或者 pongo2.FromFile 等api返回一个*Template类型的指针,它包含了模板。

2  template.Execute(pongo2.Context{"name": "florian"}) 传递一个类似json的对象 {"name": "florian"} 执行template的Execute进行数据渲染到模板。其返回一个字符串out。out就是渲染后的模板。