模板语法类似于 Python 的语法。它要确保语句块的正确缩进,所以你在写模板的时候无需担心会出现
缩进问题。详细的语法描述可看 SimpleTemplate模板引擎 。
虽然 Python 是一门强大的语言,但它对空白敏感的语法令其很难作为一个模板语言。 SimpleTemplate
移除了一些限制,允许你写出干净的,有可读性的,可维护的模板,且保留了 Python 的强大功能。
在上章《python bottle 框架基础教程:模板使用 》例子中学习到了 {{...}} 语句的用法。只要在 {{...}} 中的 Python 语句返回一个字符串或有一个字符串的表达形式,它就是一个有效的语句。
嵌入 Pyhton 代码
一行以 % 开头,表明这一行是 Python 代码。它和真正的 Python 代码唯一的区别,在于你需要显式地在末尾添加 %end 语句,表明一个代码块结束。这样你就不必担心 Python 代码中的缩进问题,SimpleTemplate模板引擎的 parser 帮你处理了。不以 % 开头的行,被当作普通文本来渲染。只有在行首的 % 字符才有意义,可以使用 %% 来转义。
python后端代码示例:
[root@linuxyw bottle]# cat main.py
#/usr/bin/env python
#coding=utf-8
from bottle import route, run
from bottle import template,view
@route('/login')
def login():
return template('login')
@route('/info')
@view('info')
def info():
name = '戴儒锋'
age = '30'
blog = 'www.linuxyw.com'
qq = '63780668'
book = ['python','linux','php']
price = {'pc':4000,'phone':2000,'bike':600}
data = {'tname':name,'tage':age,'tblog':blog, 'tqq': qq,'tbook':book,'tprice':price,'tnum':''}
return data
run(host='0.0.0.0', port=8080, debug=True) #开启服务
模板代码:
[root@linuxyw bottle]# cat views/info.tpl
会员中心
会员信息
如果tname后端有返回值(即非空值),就显示出来
%if tname:
姓名:{{tname}}
%end
也可以用if else语句
%if tnum:
tnum:{{tnum}}
%else:
tunm没有定义
%end
也可以用if xx == 'yy'语句
%if tage == '30':
哈哈,你老了!
%else:
你年轻吗?
%end
如果tnum没有定义那就用默认值666::{{get('tnum','666')}}
所有的书名用for循环遍历:
%for col in tbook:
{{col}}
%end
浏览器访问后显示(http://ip+8080/info):
bottle模板效果
总结:
模板上的语法,有点类似于python中的语法,注意用%开头,end结尾,当用end结尾时,不需要加冒号
%if tname,用这个语法时,首先需要python后端有定义这个tname变量,即在return时,要有定义,要不然就会出错;如果return没定义的变量,则需要用{{get('tnum','666')}}这种方式,这个语法是如果检测到一个没有定义的变量时,就直接定义这个变量,并赋值666给它,避免模板语法出错;%for循环用起来和python类似了。
更多的语法,可以查看bottle官网文档或其它教程