我想将twisted.web模板与twisted.web资源一起使用。
但我不知道如何让他们一起工作。
我尝试使用flatten(request, MyElement(), request.write)
,但最终会抛出异常:Request.write called on a request after Request.finish was called.
有人能为我提供一个如何将这两个类一起使用的基本示例吗?
答案 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