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

3 投票
1 回答
1112 浏览
提问于 2025-04-17 06:28

我想把twisted.web的模板和twisted.web的资源一起使用。

但是我就是搞不懂怎么让它们一起工作。

我试着用 flatten(request, MyElement(), request.write),但是最后出现了一个错误:Request.write在Request.finish之后被调用。

有人能给我一个非常简单的例子,教我怎么把这两个类一起用吗?

1 个回答

5

听起来你忘记在你的 render() 方法里返回 NOT_DONE_YET 了,所以 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

撰写回答