内嵌语句
只要在{{…}} 中的Python的语句返回一个字符串或有一个字符串的表达形式,它就是一个有效的语句。

>>>from bottle import template
>>>template('hello {{name}}', name='ju')
u'helloju'
>>>template('hello {{name if name else "world!"}}', name=None)
u'helloworld!'
>>>template('hello {{name if name else "world!"}}',name="feige")
u'hellofeige'

{{}} 中的Python的语句会在渲染的时候被执行,可访问传递给SimpleTemplate.render()方法的所有参数。默认情况下,自动转义HTML 标签以防止XSS 攻击。可在语句前加上” !” 来关闭自动转义。

>>>template('hello {{name if name else "world!"}}',name="<b>feige</b>")
u'hello&lt;b&gt;feige&lt;/b&gt;'
>>>template('hello {{!name if name else "world!"}}',name="<b>feige</b>")
u'hello<b>feige</b>'

在模版中嵌入Pyhton 代码
以%开头,表明这一行是的Python 代码。它和真正的的Python 代码唯一的区别,在于你需要显式地在末尾添加%结束语句,表明一个代码块结束。这样你就不必担心的Python 代码中的缩进问题,SimpleTemplate 模板引擎的解析器帮你处理了。不以%开头的行,被当作普通文本来渲染。只有在行首的%字符才有意义,可以使用%% 来转义。%% 表示以’%’ 开头的一行,%%% 表示以’%%’ 开头的一行

[root@jubottle]# cat templ.py
#!/usr/bin/envpython
#coding=utf-8
frombottle import route,run,view@route('/hello')
@view('hello_template')
defhello():name="昝道广"blog="xzan.ngrok.cc"myfriend=['小昝','小道','小广']myinfodir={'age':20,'weight':130}info={'name':name,'age':myinfodir,'weight':myinfodir,'blog':blog,'SNS':myfriend}return info
run(host='127.0.0.1',port=80,debug=True)
[root@jubottle]# cat views/hello_template.tpl
<html><head><title>my infomatiom!</title></head><body><h1>My infomation</h1><p>姓名:%if name:Hi <b>{{ name }}</b>%else:<i>Hello world</i>%end</p><p>年龄:{{ age.get('age') }}</p><p>体重:{{ weight.get('weight')}}</p><p>博客:{{ blog }}</p><p>朋友圈:%for i in SNS:{{ i }} %end</p></body>
</html>

在浏览器中输入:http : //127.0.0.1/ hello(这里用的我自己的域名,道理是一样的)

如果需要返回一个没有定义的变量,使用{{get(’name’,’feige’)}} 如果需要返回一个没有定义的变量,则使用%if name 时,首先需要在后端已经定义过名变量,即在返回时,不然会出错。方式,这个语法的意思是如果检测到一个没有定义的变量时,就直接定义这个变量并赋值feige 。

模板继承
模版继承主要使用%包括和%重订两个语句实现。
使用%包括sub_template [kwargs] 语句来包含其他模板。sub_template 参数是模板的文件名或路径。[kwargs] 部分是以逗号分开的键值对,是传给其他模板的参数。** kwargs 这样的语法来传递一个字典也是允许的。

[root@jubottle]# cat templ.py
#!/usr/bin/envpython
#coding=utf-8
frombottle import route,run,view@route('/hello')
@view('hello')
defhello():name="昝道广"age=20weight=130info={'name':name,'age':age,'weight':weight}return info
run(host='127.0.0.1',port=80,debug=True)
[root@jubottle]# cat views/hello.tpl
<html><head><title>my infomatiom!</title></head><body><h1>My infomation</h1><p>姓名:{{ name }}</p><p>年龄:{{ age }}</p>%include info.tpl</body>
</html>[root@jubottle]# cat views/info.tpl
<html>
<head></head>
<body>
<p>体重:{{get('weight','136')}}</p>
<p>生日:{{get('brithday','0308')}}</p>
</body>
</html>

在浏览器中输入:http : //127.0.0.1/ hello
结果和上边类似

%rebasebase_template [kwargs] 语句会渲染base_template 这个模板,而不是原先的模板。然后base_template 中使用一个空%包括语句来包含原先的模板,并可访问所有通过kwargs 传过来的参数。这样就可以使用模板来封装另一个模板,或者是模拟某些模板引擎中的继承机制。

[root@jubottle]# cat templ.py
#!/usr/bin/envpython
#coding=utf-8
frombottle import route,run,view     #导入view@route('/hello')
@view('content')#使用view()修饰器来渲染模版
defhello():name="乾楠有"age=29weight=138info={'name':name,'age':age,'weight':weight}return info
run(host='192.168.116.199',port=8000,debug=True)
[root@jubottle]# cat views/base.tpl
<html><head><title>{{ title or 'DefaltTitle'}}</title></head><body><p>{{ Line or 'whatever' }}</p>%include    #这里需要一个空的%include</body>
</html>[root@jubottle]# cat views/content.tpl
<p>姓名:{{ name }}</p>
<p>年龄:{{ age }}</p>
<p>体重:{{get('weight','136')}}</p>
<p>生日:{{get('brithday','0308')}}</p>
%rebasebase title="This is my main page!",Line="The first line"  #继承base模版,并且向base传递了title和Line两个参数。

在浏览器中输入:http : //192.168.116.199:8000/ hello
此时可以观察到结果

注:所博客所有的IP都需要自己配置或者只用用127.0.0.1:80端口
转载自:
http://changfei.blog.51cto.com/4848258/1663908

瓶框(bottle)架学习之模版使用相关推荐

  1. extjs学习—-官方模版注释2

    简介:这是extjs学习--官方模版注释2的详细页面,介绍了和javascript,有关的知识.技巧.经验,和一些javascript源码等.这次是一些弹出框.自己将官方的看了几遍,重写了下.其实也差 ...

  2. Faster RCNN原理篇(一)——Bounding-Box Regression边界框回归的学习和理解

    Bounding-Box Regression边界框回归的学习和理解 引言 1. (Why?)为何要做边框回归? 2. (What?)什么是边框回归? 3. (How?)如何实现边框回归? 4. 边框 ...

  3. Flask框架的学习——04—(模版继承、静态文件的配置、豆瓣APP界面案例实现)

    1.模版继承 Flask中的模板可以继承,通过继承可以把模板中许多重复出现的元素抽取出来,放在父模板中,并且父模板通过定义block给子模板开一个口,子模板根据需要,再实现这个block,假设现在有一 ...

  4. 处理之后的图像句柄传到显示框_深度学习目标检测与预处理模块

    一般的深度学习的部署流程 对计算机而言,能够"看到"的是图像被编码之后的数字,但它很难解高层语义概念,比如图像或者视频帧中出现目标的是人还是物体,更无法定位目标出现在图像中哪个区域 ...

  5. bottle框架学习(八)之Mysql数据库的操作

    MySQLdb 是用于Python连接Mysql数据库的接口. 安装MySQLdb [root@ju bottle]# yum install MySQL-python –y 如果使用编译安装请到这里 ...

  6. bootstrap下拉框分页_学习使用Bootstrap输入框、导航、分页等常用组件

    Bootstrap输入框和导航组件 一.下拉菜单 下拉菜单,就是点击一个元素或按钮,触发隐藏的列表显示出来. 按钮和菜单需要包裹在.dropdown 的容器里,而作为被点击的元素按钮需要设置datat ...

  7. 无人驾驶——矩形框检测的学习笔记

    1 致谢 感谢志兴老师的代码和指导! 2 矩形框检测的基本流程 1. 根据图像特点,根据通道值进行灰度化,这里我们选取的是[B,R]这两个通道: (我们这里不进行高斯模糊,因为图像的噪声比较小:主要原 ...

  8. java 获取密码框密码,获得Windows下的密码框密码--编程学习网

    获得Windows下的密码框密码,似乎是很多人感兴趣的话题,CSDN上问这类问题的人不计其数--这样看来,老罗也不能免俗啦,今天就让我跟大家探讨一下如何实现这一功能吧.^_^ 我们知道,Windows ...

  9. sweetalert弹框插架--自定义多按钮事件

    1.引入css  js <link rel="stylesheet" href="/css/sweetalert/sweetalert.css" /> ...

最新文章

  1. [ JSOI 2015 ] Salesman
  2. 编写Java程序最容易犯的21种错误
  3. 浏览器为什么会有兼容性问题
  4. 几个用于序列化的代码片段
  5. mysql useunicode_jdbc连接mysql 为什么在连接时已经这样设置了 ?useUnicode=truecharacterEncodin...
  6. 美国大学计算机与信息科学,【计算机学术讲堂】美国福特汉姆大学计算机与信息科学系Md Zakirul Alam Bhuiyan博士莅临我院作学术报告...
  7. mysql中间件研究(Atlas,cobar,TDDL,Mycat)
  8. Python+OpenCV:二维直方图(2D Histograms)
  9. ssh放行端口_安全组中已经添加规则放行SSH端口的访问之后使用f1 RTL的方法
  10. Storm概念学习系列之并行度与如何提高storm的并行度
  11. python数据结构4-栈和队列
  12. Linux设备驱动模型-Device
  13. Linux系统管理--Centos6服务管理
  14. 自动设置微信朋友圈权限
  15. 5个聚合导航网站,资源、工具、素材应有尽有
  16. 双线性光强插值(Gouraud明暗处理)学习笔记
  17. PDF中的空白页怎么删除
  18. proftpd的一些简单配置
  19. 微信小程序云开发csv导入数据库中文乱码问题解决
  20. 卖身风波中的考拉员工

热门文章

  1. 华为、百度、小米踏上造车新征程,软件如何吞噬汽车?
  2. 2021第一融!第四范式完成D轮7亿美元融资
  3. 对话谢宝友:搞真正自研的国产操作系统,而不是伪创新
  4. 机器学习中,梯度下降算法的问题引入
  5. 【公开课预告】AutoML知多少
  6. 评分9.7!这本Python书彻底玩大了?程序员:真香!
  7. 50行Python代码,获取公众号全部文章
  8. 嫌Terminal终端太单调?快收下这几个有趣的改造工具!
  9. 超过C++、压制Java与C,Python拔得TIOBE年度编程语言!
  10. 谷歌搜索喜迎20年,为手机主页添加信息流!