介绍:

调用的web.py模版语言Templetor旨在将python的强大功能带入模版。它不是为模板创建新语法,而是重用python语法。

Templetor故意限制模版中的变量访问。用户可以访问传递给模版的变量和一些内置的python函数,这允许不受信任的用户编写模版,而不用担心他们会对正在运行的系统造成损害,当然,可以增加可用的全局变量。

简单的模版:

$def with (name)
Hello $name!

第一行表示定义了一个名为name的参数,$name在渲染模版时,第二行中的名称将替换为name的值。

使用模版系统: 

渲染模版的常用方法是:

render = web.template.render('templates')

return render.hello('world')

该render函数将模版root作为参数。使用给定的参数render.hello(..)调用模版hello.html。实际上,它会hello.* 在模版根目录中查找匹配的文件并选择第一个匹配文件。

也可以使用文件从文件创建模版render.

hello = web.template.frender('templates/hello.html')

print hello('world')

如果将模版作为字符串:

template = "$def with (name)\nHello $name"
hello = web.template.Template(template)
print hello('world')

表达替换: 

特殊字符$用于指定python表达式。表达式可以包含在显示分组中()或{}用于显示分组。

Look, a $string.
Hark, an ${arbitrary + expression}.
Gawk, a $dictionary[key].function('argument').
Cool, a $(limit)ing.

分配: 

定义变量并重新分配一些变量。

$ bug = get_bug(id)
<h1>$bug.title</h1>
<div>
$bug.description
<div>

注意$分配后的空格,需要区分赋值和表达式替换。、、

过滤: 

默认情况下,Templetor使用web.websafe过滤器进行HTML编码。

>>> render.hello("1 < 2")
"Hello 1 &lt; 2"

要使用:后关闭过滤器$:

The following will not be html escaped.
$:form.render()

换行抑制: 

可以通过 \ 在行尾添加字符来抑制换行符。

If you put a backslash \
at the end of a line \
(like these) \
then there will be no newline.

使用$$得到$的输出。

Can you lend me $$50?

$#用作评论指标,任何一$#开头直至行尾的内容都会被忽略。 

控制结构: 

模版系统支持for, while, if, elif 和 else,和在python中一样,语句的主题是缩进的。

$for i in range(10):
I like $i $for i in range(10): I like $i $while a:
hello $a.pop() $if times > max:
Stop! In the name of love.
$else:
Keep on, you can do it.

for 循环中可用的许多变量:

loop.index: the iteration of the loop (1-indexed)
loop.index0: the iteration of the loop (0-indexed)
loop.first: True if first iteration
loop.last: True if last iteration
loop.odd: True if an odd iteration
loop.even: True if an even iteration
loop.parity: "odd" or "even" depending on which is true
loop.parent: the loop above this in nested loops
<table>
$for c in ["a", "b", "c", "d"]:
<tr class="$loop.parity">
<td>$loop.index</td>
<td>$c</td>
</tr>
</table>

定义新的模版函数$def .支持关键字参数。

$def say_hello(name='world'):
Hello $name! $say_hello('web.py')
$say_hello()

例子:

$def tr(values):
<tr>
$for v in values:
<td>$v</td>
</tr> $def table(rows):
<table>
$for row in rows:
$:row
</table> $ data = [['a', 'b', 'c'], [1, 2, 3], [2, 4, 6], [3, 6, 9] ]
$:table([tr(d) for d in data])

可以使用code块写入任意python代码。

$code:
x = "you can write any python code here"
y = x.title()
z = len(x + y) def limit(s, width=10):
"""limits a string to the given width"""
if len(s) >= width:
return s[:width] + "..."
else:
return s And we are back to template.
The variables defined in the code block can be used here.
For example, $limit(x)

VAR:  

该var块,可用于在模版结果中定义其他属性。

$def with (title, body)

$var title: $title
$var content_type: text/html <div id="body">
$body
</div>

上述模版的结果可以使用如下:

out = render.page('hello', 'hello world')
out.title
u'hello'
out.content_type
u'text/html'
str(out)
'\n\n<div>\nhello world\n</div>\n'

内置和全局:

就像任何python函数一样,模版也可以访问内置函数及其参数和局部变量。像一些常见的内置函数,range, min,max等,以及布尔值True和False被提供给所有的模版,除了内置函数之外,还可以指定特定于应用程序的全局变量,以使他们可以在所有的模版中访问。

可以将Globals指定为参数web.template.render.

import web
import markdown globals = {'markdown': markdown.markdown}
render = web.template.render('templates', globals=globals)

也可以控制在模版中公开的内置组件。

# disable all builtins
render = web.template.render('templates', builtins={})

安全:

Templetor的设计目标之一是允许不受信任的用户编写模版。

要是模版执行安全,模版中不允许以下内容:

  • 不安全之类的语句import , exec 等等
  • 访问以 。开头的属性_
  • 不安全内建想open,getattr,setattr等等。

SecurityException 如果您的模板使用其中任何一个,则会引发

从web.py 0.2模版升级:

新实现大多与早期实现兼容。但是,由于以下原因,某些情况可能无效。

  • 模板输出始终像TemplateResult对象一样存储,但是将其转换为unicode或者str将结果作为unicode / string。
  • 重新分配全球价值将无效。如果x是全局的,则以下内容不起作用。

  $ x = x + 1

以下仍然受支持,但不是首选。

  • 使用\$转义美元。请$$改用。
  • 修改web.template.Template.globals。将全局变量web.template.render作为参数传递。

web.py模版系统的更多相关文章

  1. web.py尝试性学习!

    首先导入web.py模块! import web 没有的话就: pip install web web.py的URL结构: urls = ( '/', "index" ) 第一部分 ...

  2. web.py+html+mysql实现web端小系统的问题汇总

    利用web.py+html(bootstrap)+mysql实现了一个小型的设备管理系统,在这个过程中遇到很多问题,将问题及解决方案总结如下,有遇到类似问题的同学,希望可以帮到你们. 1.关于中文的编 ...

  3. web.py学习心得

    1.注意判断数字时,如果是get传递的参数,一定要用int转换.不然出错. 2.$var 定义时,冒号后的内容不是python内容,需加上$符号.如$var naviId:$naviId. 3.各个模 ...

  4. python web.py安装使用

    官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们快速了解python语法(遇到看不懂的语法就去google),另一方面可以学习到python高级特性的使用 ...

  5. web.py 学习(-)Rocket web框架

    Rocket是一个轻量级,多线程,符合WSGI规范的web框架. Rocket使用一个线程监听连接,接收到连接之后放到Queue中,有worker线程进行处理. Rocket含有以下属性: metho ...

  6. Nginx uWSGI web.py 站点搭建

    一.安装nginx 在安装nginx前,需要先装nginx的依赖包. 1.如果没有yum则先安装yum   删除原有的yum  rpm -aq|grep yum|xargs rpm -e --node ...

  7. web.py框架之高级应用

    二.高级应用 2.1 web.ctx 获取客户端信息,比如:来源页面.客户端浏览器类型等. web.ctx基于 threadeddict类,又被叫做 ThreadDict.这个类创建了一个类似字典(d ...

  8. 用python写web一定要去破解的异步请求问题.经历web.py和tornado,完破!

    1.问题 上个学期,给学校写了一个数据服务,主要从oracle里面读取一些数据供查询使用,非常快速的用web.py搭建了起来.调试顺利,测试正常,上线!接下来就是挨骂了,我铁定知道会卡,但是没想到会那 ...

  9. 【Python】web.py初识学习

    简单而直接的Python web 框架:web.py 2016年11月03日 14:09:08 擒贼先擒王 阅读数:35157更多 个人分类: Web   From:https://www.oschi ...

随机推荐

  1. spark中saveAsTextFile如何最终生成一个文件

    原文地址: http://www.cnblogs.com/029zz010buct/p/4685173.html 一般而言,saveAsTextFile会按照执行task的多少生成多少个文件,比如pa ...

  2. google-protobuf安装详解

    前言 编译调试项目的过程中涉及到caffe的编译,提示没有安装protobuf的错误,本文详解protobuf的安装: 问题描述 解决步骤 1.查看google protobuf的github,没有直 ...

  3. (5)可变、不可变和hash函数

    分类情况 与列表相似,列表用[],元组是()表示 内存角度看列表与数字的变与不变 列表 >>>l = [1,2,3,4] >>>id(l) 4392665160 & ...

  4. CTF-练习平台-Misc之 听首音乐

    十九.听首音乐 用软件audacity打开后发现如下 上面那一行是可以看做摩斯电码,翻译过来是: ..... -... -.-. ----. ..--- ..... -.... ....- ----. ...

  5. jsp内置对象request 和response

    1.request对象主要用于处理客户端的请求 request对象常用方法 一.String  request.getParameter(String name)             根据页面表单 ...

  6. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(十)-- 发布(Windows)

    本篇将在这个系列演示的例子上继续记录Asp.Net Core在Windows上发布的过程. Asp.Net Core在Windows上可以采用两种运行方式.一种是自托管运行,另一种是发布到IIS托管运 ...

  7. 常用css样式函数总结

    1:按钮样式 /*按钮*/ @mixin btn-style($btnwidth, $color, $bgcolor, $bdcolor) { width: $btnwidth; height: 30 ...

  8. .gitignore忽略git版本库中的文件(夹)

    # 忽略*.o和*.a文件 *.[oa] # 忽略*.b和*.B文件,my.b除外 *.[bB] !my.b # 忽略dbg文件和dbg目录 dbg # 只忽略dbg目录,不忽略dbg文件 dbg/ ...

  9. 转 Katana 项目入门

    Katana 项目入门 Howard Dierking 当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每 ...

  10. 我的nginx iis 负载均衡学习(环境搭建)

    1,下载并安装nginx 比较简单 2,进行网站的配置 我使用了我的IIS 站点中已经拥有的两个站点 3,进行nginx 的配置 配置如下: 在server 节点之前添加如下的配置: upstream ...