使用资源模板进行轻量级模板化

概述

虽然 Twisted 可以使用高级模板系统(例如,DivmodNevow),但有时需要一个更轻量的系统,允许直接编写 HTML。虽然 ResourceScript 可用,但它编码开销高,并且需要一些无聊的字符串运算。 ResourceTemplate 使用 Quixote 的 PTL(Python 模板语言)填补了 Nevow 和 ResourceScript 之间的空白。

ResourceTemplates 需要安装 Quixote。在 Debian 中,这意味着安装 python-quixote 包 (apt-get install python-quixote)。其他操作系统需要其他方法来安装 Quixote,或者可以手动安装。

配置 Twisted Web

让 Twisted Web 支持 ResourceTemplates 的最简单方法是使用 web tap 的 --processor 标志将它们绑定到某个扩展。以下是一个示例

% twistd web --path=/var/www \
        --processor=.rtl=twisted.web.script.ResourceTemplate

上面的命令行将 rtl 扩展绑定到使用 ResourceTemplate 处理器。其他方法也是可能的,但需要更多 Python 代码,并且超出了本 HOWTO 的范围。

使用 ResourceTemplate

ResourceTemplates 使用称为“Python 模板语言”的 Python 扩展进行编码。PTL 的完整文档可在 quixote 网站 上找到。Web 服务器将期望 PTL 源文件定义一个名为 resource 的变量。这应该是一个 twisted.web.resource.Resource,其 .render 方法将被调用。通常,您希望使用关键字 template 而不是 def 来定义 render

以下是一个资源模板的简单示例。

webquote.rtl

from twisted.web.resource import Resource

def getQuote():
    return "An apple a day keeps the doctor away."


class QuoteResource(Resource):

    template render(self, request):
        """\
        <html>
        <head><title>Quotes Galore</title></head>

        <body><h1>Quotes</h1>"""
        getQuote()
        "</body></html>"


resource = QuoteResource()