模板继承主要使用以下二个语句
%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
- <html>
- <head>
- <title>{{get('title','linux系统运维')}}</title>
- </head>
- <body>
- <h2></h2>
- <div>
- %include('memu.tpl')
- </div>
- <div>
- %include
- </div>
- </body>
- </html>
{{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
- <ul>
- <li>python运维开发</li>
- <li>linux系统运维</li>
- <li>PHP网页开发</li>
- <li>C语言底层开发</li>
- </ul>
最后,来看看index.tpl模板的代码,这代码里,会把base.tpl继承过来
- %rebase base title='python bottle 模板继承'
- <p>
- 哈喽,我是首页,我这的代码很简单,就这么几行,但你要是在浏览器中打开源代码看看,</br>
可就不止这几行了,而且包括了base.tpl和memu.tpl的所有代码,打开看看? - </p> %rebase base title='python bottle 模板继承'
%rebase base title='python bottle 模板继承' 用%rebase来继承base.tpl模板,继承的时候,不需要加.tpl后缀,后面可带需要传递给base模板参数,如我就传递了title='python bottle 模板继承',如果有更多需要传递的参数,可用逗号分开,传递多个参数。这个title对应的是base.tpl中的<title>{{get('title','linux系统运维')}}</title>
用浏览器访问,看看效果:
再看看它的源代码:
- <html>
- <head>
- <title>python bottle 模板继承</title>
- </head>
- <body>
- <h2></h2>
- <div>
- <ul>
- <li>python运维开发</li>
- <li>linux系统运维</li>
- <li>PHP网页开发</li>
- <li>C语言底层开发</li>
- </ul>
- </div>
- <div>
- <p>
- 哈喽,我是首页,我这的代码很简单,就这么几行,但你要是在浏览器中打开源代码看看,</br>
- 可就不止这几行了,而且包括了base.tpl和memu.tpl的所有代码,打开看看?
- </p>
- </div>
- </body>
- </html>
如果有不懂的,可以看bottle官网文档
官方文档:http://www.bottlepy.org/docs/dev/index.html
SVN请跳转至:教程总目录
这些代码已提交到SVN中,有需要的朋友可在SVN下载
2016 年 1 月 27 日 下午 7:58 地板
alert(评论);
2015 年 9 月 24 日 下午 9:23 板凳
很好,研究研究
2015 年 5 月 27 日 上午 9:30 沙发
正在学习web扩建 看到这些文字 受益匪浅!!
来自外部的引用: 2