TurboGears - 服务模板


事件虽然可以将 HTML 内容返回到浏览器,但对于更高级的输出,始终首选使用模板引擎。在变速箱“快速启动”的全栈项目中,Genshi 被启用为默认模板渲染器。然而,在最小的应用程序中,需要安装并启用 Genshi(或任何其他模板引擎,例如 jinja)。Genshi 模板引擎允许用纯 xhtml 编写模板并验证它们以在编译时检测问题并防止提供损坏的页面。

模板通过使用点符号来引用。在我们的Hello项目中,提供了一个templates目录来存储模板网页。因此,sample.html将被称为hello.templates.sample(未提及扩展名)。TurboGears 通过公开装饰器渲染此模板,并通过tg.render_template()函数将控制器方法链接到它。

公开的控制器函数返回一个Python字典对象。该字典对象又被传递到链接的模板。模板中的占位符由字典值填充。

首先,让我们用纯 html 脚本显示一个网页。公开的控制器返回一个空字典对象,因为我们不打算发送任何要在 HTML 脚本内解析的数据。

如何创建示例 HTML

下面给出了我们的sample.html 。确保它存储在项目的 templates 目录中。

<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()方法。它返回一个字典对象。这是通过模板目录中的链接模板页面 example.html 选择的。然后,网页中的 ${person} 被 MVL 替换。

还可以在控制器函数中访问 HTML 表单数据。HTML 表单用于发送表单数据。

结果