【Python】简单Web框架从零开始(四):300行代码搞定模板渲染
一、前言
模板语言由HTML代码和逻辑控制代码组成,此处@PHP。通过模板语言可以快速的生成预想的HTML页面。应该算是后端渲染不可缺少的组成部分。
二、功能介绍
通过使用学习tornado、bottle的模板语言,我也效仿着实现可以独立使用的模板渲染的代码模块,模板语法来自tornado和bottle的语法。可以用来做一些简单的网页渲染,邮件内容生成等HTML显示方面。以下就是简单的语法使用介绍。
1. 变量。使用{{ }}包裹起来,里面的变量为Python传入。模板渲染时会将传入的变量转换成字符串并填入对应位置。
# 模板文件内容 <title>{{my_title}}</title> <label>{{ session.name }}</label> # py代码调用 t_html 为上面的内容 Template(t_html).render(my_title="标题", session = some_obj)
2. 转义。默认传入的数据都会进行HTML转义,可以使用{% raw value %}来将value的内容按原始字符串输出。
# 模板文件内容 <p>{% raw value %} </p> # Py调用内容 Template(t_html).render(my_title="<label>显示标签</label>")
3. 条件控制。支持Python的if,elif,else。条件代码需要放在{% %}内部,并且在条件结束后需要额外增加{% end %},用于标识条件控制语句块范围。
# 模板文件内容 {% if a > 1%} <label>A大于1</label> {% else %} <label>A小于或等于1</label> {% end %} # py调用 Template(t_html).render(a=1)
4. 循环控制。支持Python的for和while。与条件控制一样也需要放在{% %}内部,并且结束处需要额外增加{% end %},用于标识循环控制语句块的范围。
# 模板文件内容 {% for i in range(10) %} <label>当前序号:{{i+1}}</label> {% end %} # py调用 Template(t_html).render()
5. 变量声明。如果需要在模板文件内声明一个变量,方便使用时,可以通过set来实现。具体格式为{% set v = xx %}。通过set声明的变量整个模板文件中都可以使用,包括在条件控制和循环控制中作为条件判断也可以。
# 模板文件内容 {% set a = 1 %} <label>a的值:{{a}}</label>
三、源码
这个模板语言模块是在Python2.7上开发使用的,如果要在Python3+上使用需要对str和bytes进行一些处理即可,由于没有引用任何其他模块,可以很好的独立使用。