twisted.web.resource.Resource 和 twisted.web.template.Element 示例
我想把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