webpy框架拥有自己的模版语言Templetor
Templetor具有Python的语言风格
可以直接嵌入Python代码
$code: videoIn = post.filename and post.filename.split(‘.‘)[-1] in [‘MP4‘] imageIn = post.filename and post.filename.split(‘.‘)[-1].upper() in [‘JPG‘]
Templetor所使用的转义字符是$, $code:表示接下来的是Python代码
与Python一样,Templetor需要保持正确的缩进,而没有标识模版开始与结束的语句
一、模版中的变量
使用模版的一个重要原因是,不同的页面只有少许文字的差异,模版在那些不同的地方定义适当的变量就可以很好地解决这个问题
Templetor模版语言中,在模版的开始,需要用$define with声明模版所使用的变量
hello.html $def with (name) Hello $name!
声明的变量必须与视图函数传入的变量保持一致,
render = web.template.render(‘templates‘) return render.hello(‘world‘)
web.template.render创建了一个渲染函数,‘templates‘是模版所在的目录
hello表示模版的名称,‘world‘便是传入模版的参数
和Python一样,模版语言中的变量也有不同的类型
如果是字符串或数值,$variable便可直接获得变量的值
非常不错的一个地方是,变量还可以是数组,字典,你可以用和Python相同的方式在模版中进行引用
但更为方便的是使用for循环控制结构
$for post in posts: #和Python完全相同的语法 <div class="item"> <a href="/view/$post.id">$post.title</a> $if context.user != ‘anonymous‘ and context.user == post.username: <div class="edit"><a href="/edit/$post.id">Edit</a></div> <div class="date">$post.posted_on[0:19]</div> <div>$post.content[0:100]</div> #对于字符串一样地可以进行切片 </div>
需要注意的是在控制结构中,引用变量不再需要在前面加上$符号
二、模版的继承
使用模版的一个重要原因在于,网页包含许多共同的导航栏或是页脚,可以设计一个基础的模版,然后在此基础上进行扩展
render = web.template.render(‘templates‘, base=‘base‘)
base.html(.html被省略)就是这个基础模版,
父模版和其他模版一样需要在首行声明,所引用的变量
$def with (page)
在视图函数中会隐式地将子模版传入page变量中
通过$:page可以获得子模版的全部内容
你可以在子模版中定义变量,这在子模版中有引用css文件时变得尤为必要
$var cssfiles: /static/index.css /static/common.css #甚至用一个变量可以引用多个css文件
在父模版中,便可吧css文件的引用放在合适的位置
<head> $if page.has_key(‘cssfiles‘): #判断子模版中是否定义了cssfiles变量 $for f in page.cssfiles.split(): <link rel="stylesheet" href="$f" type="text/css"> </head>
时间: 2024-10-06 16:15:13