bottle框架学习(四)之模版进阶使用

内嵌语句

只要在{{...}} 中的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 代码唯一的区别,在于你需要显式地在末尾添加%end语句,表明一个代码块结束。这样你就不必担心Python代码中的缩进问题,SimpleTemplate模板引擎的 parser 帮你处理了。不以%开头的行,被当作普通文本来渲染。只有在行首的%字符才有意义,可以使用%%来转义。%%表示以‘%‘开头的一行,%%%表示以‘%%‘开头的一行

[[email protected]]# cat templ.py 
#!/usr/bin/envpython
#coding=utf-8
frombottle import route,run,view
 
@route(‘/hello‘)
@view(‘hello_template‘)
defhello():
    name="乾楠有"
   blog="http://changfei.blog.51cto.com"
    myfriend=[‘奥巴马‘,‘普京‘,‘卡梅伦‘]
    myinfodir={‘age‘:29,‘weight‘:138}
    info={‘name‘:name,‘age‘:myinfodir,‘weight‘:myinfodir,‘blog‘:blog,‘SNS‘:myfriend}
    return info
run(host=‘0.0.0.0‘,port=8000,debug=True)
[[email protected]]# 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://192.168.116.199:8000/hello

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

模板继承

模版继承主要使用%include和%rebase两个语句实现。

使用%include sub_template  [kwargs] 语句来包含其他模板。sub_template 参数是模板的文件名或路径。[kwargs] 部分是以逗号分开的键值对,是传给其他模板的参数。**kwargs 这样的语法来传递一个字典也是允许的。

[[email protected]]# cat templ.py 
#!/usr/bin/envpython
#coding=utf-8
frombottle import route,run,view
 
@route(‘/hello‘)
@view(‘hello‘)
defhello():
    name="乾楠有"
    age=29
    weight=138
    info={‘name‘:name,‘age‘:age,‘weight‘:weight}
    return info
run(host=‘0.0.0.0‘,port=8000,debug=True)
[[email protected]]# 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>
 
[[email protected]]# cat views/info.tpl 
<html>
<head></head>
<body>
<p>体重:{{get(‘weight‘,‘136‘)}}</p>
<p>生日:{{get(‘brithday‘,‘0308‘)}}</p>
</body>
</html>

在浏览器中输入:http://192.168.116.199:8000/hello

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

[[email protected]]# cat templ.py 
#!/usr/bin/envpython
#coding=utf-8
frombottle import route,run,view     #导入view
 
@route(‘/hello‘)
@view(‘content‘)#使用view()修饰器来渲染模版
defhello():
    name="乾楠有"
    age=29
    weight=138
   info={‘name‘:name,‘age‘:age,‘weight‘:weight}
    return info
run(host=‘0.0.0.0‘,port=8000,debug=True)
[[email protected]]# cat views/base.tpl 
<html>
    <head>
    <title>{{ title or ‘DefaltTitle‘}}</title>
    </head>
    <body>
    <p>{{ Line or ‘whatever‘ }}</p>
    %include    #这里需要一个空的%include
    </body>
</html>
 
[[email protected]]# 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

查看一下页面的源码:

时间: 2024-10-29 19:06:50

bottle框架学习(四)之模版进阶使用的相关文章

bottle框架学习(三)之模版的使用

模板的基本使用 Bottle内置了一个快速强大的模板引擎,称为SimpleTemplate模板引擎.可通过template() 函 数或view()修饰器来渲染一个模板.只需提供模板的名字和传递给模板的变量.如下: [[email protected]]# tree . . ├── templ.py └── views └── hello.tpl 1directories, 2files [[email protected]]# cat templ.py  #!/usr/bin/envpytho

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

MySQLdb 是用于Python连接Mysql数据库的接口. 安装MySQLdb [[email protected] bottle]# yum install MySQL-python –y 如果使用编译安装请到这里下载安装包https://pypi.python.org/pypi/MySQL-python并执行以下命令 [[email protected] bottle]# gunzip  MySQL-python-1.2.3.tar.gz [[email protected] bottl

bottle框架学习(一)之安装以及路由的使用

安装bottle: [[email protected] bottle]#  yum install python-devel python-setuptools -y [[email protected] bottle]#  easy_install pip [[email protected] bottle]#  pip install bottle 官方文档:http://www.bottlepy.org/docs/dev/index.html 静态路由 [[email protected

Laravel框架学习(四)

一. composer的安装: 1.Composer是什么? 是 PHP 用来管理依赖(dependency)关系的工具. 你可以在自己的项目中声明所依赖的外部工具库(libraries), Composer 会帮你安装这些依赖的库文件. 2.网址:https://getcomposer.org 下载:https://getcomposer.org/download/ 中国全量镜像:http://pkg.phpcomposer.com/ 启用本镜像服务命令: composer config -g

bottle框架学习(五)之文件的下载与上传

下载文件 Bottle文件下载还是使用static_file这个模块,只是多加了一个参数:download=True,还是看例子吧! [[email protected]]# cat download.py #!/usr/bin/envpython #coding=utf-8 frombottle import route,run,view,static_file   @route('/download/<filename:path>') defdownload(filename):     

bottle框架学习(六)之错误与重定向

[[email protected] bottle]# cat error.py #!/usr/bin/env python #coding=utf-8 from bottle importroute,run,error,abort,redirect   #访问页面出错,Bottle会显示一个默认的错误页面,提供足够的debug信息.你也可以使用error()函数来自定义你的错误页面 @error(404) def error404(error):    return '访问出错啦!' #一般返

WebGL——osg框架学习四

这篇我们接着来看一下DrawEntityActor类,我们来看看这个继承DrawActor的类到底做了什么事.我们之前学习了Drawable对应的DrawActor,那么我们类比的来看DrawableEntity对应DrawEntityActor,这样就好理解一些.首先我们还是先来看DrawEntityActor的构造函数,看看他除了继承DrawActor以外还有哪些私有成员.下面是DrawEntityActor的构造函数. 1 /* 2 绘制对象角色 3 */ 4 let DrawActor

bottle框架学习(七)之session的使用

Bottle 自身并没有提供Session的支持,,可以使用beaker中间件或自己实现.Beaker是一个缓存和会话的库,与Web 应用程序和独立的Python 脚本及应用程序一起使用.它是WSGI 的中间件,能够很简单地嵌入,与基于 WSGI 的 Web 应用程序一起使用,并且缓存修饰器对于任何基于 Python 的应用程序都是容易使用的. beaker文档:http://beaker.readthedocs.org/en/latest/index.html 安装beaker [[email

bottle框架学习(二)之HTTP请求

HTTP 请求方法 HTTP 协议有很多种请求方法.route默认使用GET方法,只响应GET请求.method参数可以给route()函数指定使用哪种方法.或用get(),post(),put()或delete()等函数来代替route()函数. POST 方法一般用于HTML 表单的提交.下面是一个使用POST 来实现用户登录的例子: [[email protected]]# cat login.py #!/usr/bin/envpython #coding=utf-8 from bottl