Bottle 内置了一个快速的,强大的模板引擎,称为 SimpleTemplate 模板引擎 。可通过 template() 函
数或 view() 修饰器来渲染一个模板。只需提供模板的名字和传递给模板的变量。默认情况, Bottle 会在 ./views/ 目录查找模板文件 (译者注:或当前目录)。可在 bottle.TEMPLATE_PATH 这个列表中添加更多的模板路径。view() 修饰器允许你在回调函数中返回一个字典,并将其传递给模板,和 template() 函数做同样的事情。
如果你不使用./views目录作为模板目录的话,则需要新创建一个模板目录,然后用 bottle.TEMPLATE_PATH.append('目录地址')的方式来增加。
以下例子是使用系统默认的views作为目录,我在当前所在的main.py目录中新创建了个文件夹,叫views,如下:
- [root@linuxyw bottle]# ll
- total 8
- -rw-r--r-- 1 root root 1333 May 24 19:35 main.py
- drwxr-xr-x 2 root root 4096 May 24 21:59 views
模板示例:
- [root@linuxyw bottle]# vim main.py
- #/usr/bin/env python
- #coding=utf-8
- from bottle import route, run
- from bottle import template
- @route('/login')
- def login():
- return template('login') #login是模板名,这里不需要填写后缀.tpl
- run(host='0.0.0.0', port=8080, debug=True) #开启服务
在views目录中,创建一个模板文件,叫login.tpl
- [root@linuxyw bottle]# vim views/login.tpl
- <html>
- <head>
- <title>登陆页面</title>
- </head>
- <body>
- <p><h2>管理员登陆</h2></p>
- <form action="/login" method="post">
- Username: <input name="username" type="text" />
- Password: <input name="password" type="password" />
- <input value="Login" type="submit" />
- </form>
- </body>
- </html>
运行main.py文件后,在浏览器中访问我的服务器地址:http://linuxyw.com:8080/login
给模板传递数据
编辑main.py文件,往程序里写入一些变量值,然后把这些值传递到模板中显示出来
- @route('/info')
- def info():
- name = '戴儒锋'
- age = '30'
- blog = 'www.linuxyw.com'
- qq = '63780668'
- return template('info',tname = name,tage = age,tblog = blog, tqq = qq)
在views模板目录中,创建一个info.tpl模板文件:
- <html>
- <head>
- <title>会员中心</title>
- </head>
- <body>
- <p><h2>会员信息</h2></p>
- <p>姓名:{{tname}}</p>
- <p>年龄:{{tage}}</p>
- <p>博客:{{tblog}}</p>
- <p>QQ:{{tqq}}</p>
- </body>
- </html>
打开浏览器,访问url地址:http://linuxyw.com:8080/info
(再次注明下,我是在我这博客服务器上写的教程,所以访问这个代码时,就直接用了我的域名直接访问,如果你是用虚拟机什么的,请用你的虚拟机IP进行访问)
在此之前,我都是用template()来渲染模板的,你也可以使用view()来渲染,我把上面的代码修改一下,使用views():
- [root@linuxyw bottle]# vim main.py
- @route('/info')
- @view('info') #在这里用view来加载info模板,记得这里不需要写模板后缀名
- def info():
- name = '戴儒锋'
- age = '30'
- blog = 'www.linuxyw.com'
- qq = '63780668'
- data = {'tname':name,'tage':age,'tblog':blog, 'tqq': qq} #用view的时候,可以用返回字典类型数据
- return data
打开浏览器,再访问:http://linuxyw.com:8080/info
下面说下模板中如何调用后端传递过来的数据
像刚才info.tpl模板中,我们用了{{tname}},{{tage}},{{tblog}},{{tqq}}方法,这个其实就是显示后端return template('info',tname = name,tage = age,tblog = blog, tqq = qq) 传递过来的数据,在后端return的数据中,前端是tname是KEY,后面name是VALUE,所以模板中使用{{}}来表示调用数据中的KEY,如{{key}},代码运行后,就会显示这key对应的value,这是一种字典数据类型的调用方法吧。
如果后端传递过来的数据value中是一个列表或字典,那么,我们可以像用python语法一样调用列表或字典中任何想要的元素。
在main.py info中增加了个书籍的列表,我在模板中需要只调用该列表中叫python的书,它位于列表中的第0个位置,所以我在模板用{{tbook[0]}}来获取。
在main.py info中再增加了一个字典类型数据,把要显示字典中key为pc的值,这个在模板中可以用{{tprice.get('pc')}来显示对应的值,这也是python字典调用方法,以下是相关的代码:
- @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}
- return data
模板info.tpl代码:
- <html>
- <head>
- <title>会员中心</title>
- </head>
- <body>
- <p><h2>会员信息</h2></p>
- <p>views()方法</p>
- <p>姓名:{{tname}}</p>
- <p>年龄:{{tage}}</p>
- <p>博客:{{tblog}}</p>
- <p>QQ:{{tqq}}</p>
- <p>python书名:{{tbook[0]}}</p>
- <p>电脑:{{tprice.get('pc')}}</p>
- </body>
- </html>
在浏览器访问后的效果:
bottle官方文档:http://www.bottlepy.org/docs/dev/index.html
这些代码已提交到SVN中,有需要的朋友可在SVN下载
SVN请跳转至:教程总目录
...
2017 年 8 月 11 日 上午 12:25 板凳
svn无法访问
2015 年 8 月 15 日 下午 9:55 沙发
谢谢博主的分享!教程深入浅出,实在是小白的福音
来自外部的引用: 3