A-A+

python bottle 框架基础教程:模板继承

2015年05月26日 bottle 评论 5 条 阅读 10,355 views 次

 

模板继承主要使用以下二个语句

%include 语句

%rebase 语句

 

%include 是用来加载其它模板用的,后面可带需要传递给模板的数据,如 % include('menu.tpl')

%rebase 是用来继承上层模板用的,简单地理解,就是把当前这个模板,嵌套到上层模板去,后面可传递参数到上层模板中去。如:%rebase base title='任务列表',position='任务列表',managetopli='active open'。被继承的模板,需要留下用来加载模板的位置,即类似占位符,用%include告诉模板,这个位置可被其实模板嵌套。

 

看不明白?请看以下例子:

先写一个简单的python后端代码,首页(访问服务器的时候)只渲染index.tpl模板,不加其它数据了

看得懂以下main.py的代码吧?特别是@route('/'),如果不懂,可看python bottle 框架基础教程:路由

  1. [root@linuxyw bottle]# cat main.py 
  2. #/usr/bin/env python
  3. #coding=utf-8
  4. from bottle import route, run
  5. from bottle import template
  6. @route('/')
  7. def index():
  8.         return template('index')
  9. run(host='0.0.0.0', port=8080, debug=True)

 

再写一个base.tpl,这个我定义为最底层的模板,这个模板一般是被其它模板继承的,代码主要是所有模板中代码相同的部分,因此这个继承功能,主要也是为了减少重复的代码,加快开发效率。

  1. [root@linuxyw bottle]# cat views/base.tpl
  2. <html>
  3.         <head>
  4.                 <title>{{get('title','linux系统运维')}}</title>
  5.         </head>
  6.         <body>
  7.                 <h2></h2>
  8.                 <div>
  9.                         %include('memu.tpl')
  10.                 </div>
  11.                 <div>
  12.                         %include
  13.                 </div>
  14.         </body>
  15. </html>

{{get('title','linux系统运维')}},这个语法,由上篇文章有讲到,忘记的可重看python bottle 框架基础教程:模板语法,意思就是获取从后端获取返回来的title值,如果后端没有返回title,那模板就给它赋值一个默认值,这个值叫'linux系统运维',如果有传递这个值,那就会按传递过来的值定义,而不再用linux系统运维。在后面的模板中,我们会看到,会给title传递一个值过来。

 

%include('memu.tpl'),意思是在base.tpl中,加载一个menu.tpl模板。

menu.tpl代码:

  1. [root@linuxyw bottle]# cat views/memu.tpl
  2. <ul>
  3.         <li>python运维开发</li>
  4.         <li>linux系统运维</li>
  5.         <li>PHP网页开发</li>
  6.         <li>C语言底层开发</li>
  7. </ul>

 

最后,来看看index.tpl模板的代码,这代码里,会把base.tpl继承过来

  1. %rebase base title='python bottle 模板继承'
  2. <p>
  3. 哈喽,我是首页,我这的代码很简单,就这么几行,但你要是在浏览器中打开源代码看看,</br>
    可就不止这几行了,而且包括了base.tpl和memu.tpl的所有代码,打开看看?
  4. </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>

 

用浏览器访问,看看效果:

bottle模板继承

bottle模板继承

 

再看看它的源代码:

  1. <html>
  2.     <head>
  3.         <title>python bottle 模板继承</title>
  4.     </head>
  5.     <body>
  6.         <h2></h2>
  7.         <div>
  8. <ul>
  9.     <li>python运维开发</li>
  10.     <li>linux系统运维</li>
  11.     <li>PHP网页开发</li>
  12.     <li>C语言底层开发</li>
  13. </ul>
  14.         </div>
  15.         <div>
  16. <p>
  17. 哈喽,我是首页,我这的代码很简单,就这么几行,但你要是在浏览器中打开源代码看看,</br>
  18. 可就不止这几行了,而且包括了base.tpl和memu.tpl的所有代码,打开看看?
  19. </p>
  20.         </div>
  21.     </body>
  22. </html>

 

如果有不懂的,可以看bottle官网文档

官方文档:http://www.bottlepy.org/docs/dev/index.html

SVN请跳转至:教程总目录

这些代码已提交到SVN中,有需要的朋友可在SVN下载

 

关键词:

5 条留言  访客:3 条  博主:0 条   引用: 2 条

  1. avatar xx

    alert(评论);

  2. avatar oesell

    很好,研究研究

  3. avatar tshare365

    正在学习web扩建 看到这些文字 受益匪浅!!

来自外部的引用: 2 条

  • python bottle框架(WEB开发、运维开发)教程 | linux系统运维
  • python bottle 框架实战教程:配置模板 | linux系统运维

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: