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

Kir*_*sev 3 python twisted

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

但我只是不明白,如何使它们一起工作.

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

有人能为我提供一个非常基本的例子,说明如何将这两个类一起使用?

Gly*_*yph 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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,链接的bug是固定的,从Twisted 12.1.0开始,这个胶水可以作为`twisted.web.template.renderElement`使用. (2认同)