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 表单用于发送表单数据。

Result