web.py 模板

2022-04-24 18:21 更新

在 Python 中写 HTML 不是聪明的选择,相反在 HTML 中写 Python 则有趣的多。幸运的是,web.py 让这件事情做得简单而又漂亮。

注意: 老版本的 web.py 使用 Cheetah 模板系统,你可以也欢迎使用其他模板系统,但它可能不会被长久支持。

给模板新建一个目录(命名为 templates),在该目录下新建一个以 .html 结尾的文件,内容如下:

<em>Hello</em>, world!

你也可以在模板中使用 web.py 模板支持代码:

$def with (name)


$if name:
    I just wanted to say <em>hello</em> to $name.
$else:
    <em>Hello</em>, world!

如上,该模板看起来就像 python 文件一样,除了顶部的 def with (表示从模板将从这后面取值)和总是位于代码段之前的$。当前,template.py 首先请求模板文件的首行 $def 。当然,你要注意 web.py 将会转义任何任何用到的变量,所以当你将 name 的值设为是一段 HTML 时,它会被转义显示成纯文本。如果要关闭该选项,可以写成 $:name 来代替 $name。

回看再看 code.py。在第一行之下添加:

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

这会告诉web.py到你的模板目录中去查找模板。然后把 index.GET改成: 告诉 web.py 在你的模板目录下查找模板文件。修改 index.GET :

name = 'Bob'
return render.index(name) (’index’ 是模板的名字,’name’ 是传入模板的一个参数)

访问站点它将显示 hello Bob。

但是如果我们想让用户自行输入他的名字,么办?如下:

i = web.input(name=None)
return render.index(i.name)

访问 / 将显示 hello world,访问 /?name=Joe 将显示 hello Joe。

URL 的后面的 ? 看起来不好看?修改下 URL 配置:

'/(.*)', 'index'

然后修改下 index.GET:

def GET(self, name):
    return render.index(name)

现在访问 /Joe 看看,它会显示 hello Joe。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号