模板继承主要使用以下二个语句
%include语句
%rebase语句
%include 是用来加载其它模板用的,后面可带需要传递给模板的数据,如 % include('menu.tpl')
%rebase 是用来继承上层模板用的,简单地理解,就是把当前这个模板,嵌套到上层模板去,后面可传递参数到上层模板中去。如:%rebase base title='任务列表',position='任务列表',managetopli='active open'。被继承的模板,需要留下用来加载模板的位置,即类似占位符,用%include告诉模板,这个位置可被其实模板嵌套。
看不明白?请看以下例子:
先写一个简单的python后端代码,首页(访问服务器的时候)只渲染index.tpl模板,不加其它数据了
看得懂以下main.py的代码吧?特别是@route('/'),如果不懂,可看python bottle 框架基础教程:路由
[root@linuxyw bottle]# cat main.py
#/usr/bin/env python
#coding=utf-8
from bottle import route, run
from bottle import template
@route('/')
def index():
return template('index')
run(host='0.0.0.0', port=8080, debug=True)
再写一个base.tpl,这个我定义为最底层的模板,这个模板一般是被其它模板继承的,代码主要是所有模板中代码相同的部分,因此这个继承功能,主要也是为了减少重复的代码,加快开发效率。
[root@linuxyw bottle]# cat views/base.tpl
{{get('title','linux系统运维')}}%include('memu.tpl')
%include
{{get('title','linux系统运维')}},这个语法,由上篇文章有讲到,忘记的可重看python bottle 框架基础教程:模板语法,意思就是获取从后端获取返回来的title值,如果后端没有返回title,那模板就给它赋值一个默认值,这个值叫'linux系统运维',如果有传递这个值,那就会按传递过来的值定义,而不再用linux系统运维。在后面的模板中,我们会看到,会给title传递一个值过来。
%include('memu.tpl'),意思是在base.tpl中,加载一个menu.tpl模板。
menu.tpl代码:
[root@linuxyw bottle]# cat views/memu.tpl
- python运维开发
- linux系统运维
- PHP网页开发
- C语言底层开发
最后,来看看index.tpl模板的代码,这代码里,会把base.tpl继承过来
%rebase base title='python bottle 模板继承'
哈喽,我是首页,我这的代码很简单,就这么几行,但你要是在浏览器中打开源代码看看,
可就不止这几行了,而且包括了base.tpl和memu.tpl的所有代码,打开看看?
%rebase base title='python bottle 模板继承' 用%rebase来继承base.tpl模板,继承的时候,不需要加.tpl后缀,后面可带需要传递给base模板参数,如我就传递了title='python bottle 模板继承',如果有更多需要传递的参数,可用逗号分开,传递多个参数。这个title对应的是base.tpl中的
{{get('title','linux系统运维')}}用浏览器访问,看看效果:
bottle模板继承
再看看它的源代码:
python bottle 模板继承- python运维开发
- linux系统运维
- PHP网页开发
- C语言底层开发
哈喽,我是首页,我这的代码很简单,就这么几行,但你要是在浏览器中打开源代码看看,
可就不止这几行了,而且包括了base.tpl和memu.tpl的所有代码,打开看看?
如果有不懂的,可以看bottle官网文档
官方文档:http://www.bottlepy.org/docs/dev/index.html
SVN请跳转至:教程总目录
这些代码已提交到SVN中,有需要的朋友可在SVN下载