嵌入代码中的 HTML 杂乱且难以维护。最好使用模板系统,在模板系统中,HTML 会保存在单独的文件中,且使用特殊语法来表示来自应用程序的数据要显示的位置。适用于 Python 的模板系统有很多:EZT、Cheetah、ClearSilver、Quixote 和 Django,而这些只是其中的一小部分。您可以通过将选择的模板引擎与您的应用程序代码绑定来使用该模板引擎。
方便起见,webapp 模块将包含 Django 的模板引擎。这包括在 SDK 中,并且是 App Engine 的一部分,因此您无需将其绑定便可使用它。
在 helloworld/helloworld.py 顶部添加以下 import 语句:
import os from google.appengine.ext.webapp import template
用类似以下的代码替换 MainPage 处理程序:
class MainPage(webapp.RequestHandler): def get(self): greetings = ["hello world","I love pythonclub.org"] url = "http://www.pythonclub.org/" url_linktext = "Python Club" template_values = { 'greetings': greetings, 'url': url, 'url_linktext': url_linktext, } path = os.path.join(os.path.dirname(__file__), 'index.html') self.response.out.write(template.render(path, template_values))
<html> <body> {% for greeting in greetings %} <blockquote>{{ greeting }}</blockquote> {% endfor %} <a href="{{ url }}">{{ url_linktext }}</a> <p> {% if debug %} debug set with value {{ debug }} {% else %} debug not set {% endif %} </p> </body> </html>
template.render(path, template_values) 将获取到该模板文件的文件路径和值参照表,然后返回呈现的文本。该模板使用 Django 模板语法来访问值并将这些值进行循环,而且可以参考这些值的属性。在许多情况下,您可以将数据存储区 Model 对象作为值直接传递,并从模板访问其属性。
Google App Engine支持的Django模板版本是0.96,请参阅 Django 0.96 模板文档。