twisted.web.resource.Resource的twisted.web.template.Element示例

时间:2011-11-16 23:10:28

标签: python twisted

我想将twisted.web模板与twisted.web资源一起使用。

但我不知道如何让他们一起工作。

我尝试使用flatten(request, MyElement(), request.write),但最终会抛出异常:Request.write called on a request after Request.finish was called.

有人能为我提供一个如何将这两个类一起使用的基本示例吗?

1 个答案:

答案 0 :(得分:5)

听起来您忘记从NOT_DONE_YET方法返回render(),因此finish()会立即为您致电。像下面这样的东西应该在Twisted中的某个地方,以帮助解决这个问题:

from twisted.web.resource import Resource
from twisted.web.template import flatten
from twisted.web.server import NOT_DONE_YET

class ElementResource(Resource):
    def __init__(self, element):
        Resource.__init__(self)
        self.element = element
    def render_GET(self, request):
        d = flatten(request, self.element, request.write)
        def done(ignored):
            request.finish()
            return ignored
        d.addBoth(done)
        return NOT_DONE_YET