webpy 模版语言

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>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。