TurboGears - 服务模板
虽然 HTML 内容可以返回到浏览器,但对于更高级的输出,始终首选使用模板引擎。在 gearbox 的"快速启动"的全栈项目中,Genshi 被启用为默认模板渲染器。然而,在最小应用程序中,需要安装和启用 Genshi(或任何其他模板引擎,如 jinja)。Genshi 模板引擎允许以纯 xhtml 编写模板并验证它们以在编译时检测问题并防止提供损坏的页面。
使用点符号引用模板。在我们的 Hello 项目中,提供了一个模板目录来存储模板网页。因此,sample.html 将被称为 hello.templates.sample(未提及扩展名)。 TurboGears 通过公开装饰器呈现此模板,并通过 tg.render_template() 函数将控制器方法链接到该模板。
公开的控制器函数返回一个 Python 字典对象。此字典对象又传递给链接的模板。模板中的占位符填充了字典值。
首先,让我们显示一个带有纯 html 脚本的网页。公开的控制器返回一个 空字典对象,因为我们不打算发送任何要在 HTML 脚本内解析的数据。
如何创建示例 HTML
我们的 sample.html 如下所示。确保它存储在项目的模板目录中。
<html> <head> <title>TurboGears Templating Example</title> </head> <body> <h2>Hello, Welcome to TurboGears!.</h2> </body> </html>
在 root.py 中添加 sample() 函数并通过它公开 sample.html。
@expose("hello.templates.sample") def sample(self): return {}
启动 Web 服务器后,输入 URL http://localhost:8080/sample 时,浏览器中将显示以下结果。
如上所述,字典对象作为参数集合发送到 Genshi 模板。此模板包含"占位符",这些占位符会动态填充从控制器接收的参数。
让我们更改 sample() 函数以将字典对象发送到示例模板。
@expose("hello.templates.sample") def sample(self,name): mydata = {'person':name} return mydata
在模板文件夹 (templates\sample.html) 中创建 sample.html
<html> <head> <title>TurboGears Templating Example</title> </head> <body> <h2>Hello, my name is ${person}!.</h2> </body> </html>
在上述 HTML 代码中,${person} 是占位符。在浏览器中输入 http://localhost:8080/sample?name=MVL 作为 URL。此 URL 映射到根控制器中的 sample() 方法。它返回一个字典对象。此对象由模板目录中的链接模板页面 sample.html 选取。然后,网页中的 ${person} 被 MVL 替换。
也可以在控制器函数中访问 HTML 表单数据。HTML 表单用于发送表单数据。