twisted.web.resource.Resource с примером twisted.web.template.Element - PullRequest
3 голосов
/ 17 ноября 2011

Я хочу использовать шаблоны twisted.web вместе с ресурсами twisted.web.

Но я просто не понимаю, как заставить их работать вместе.

Я пытался использовать flatten(request, MyElement(), request.write), но в итоге выдается исключение: Request.write called on a request after Request.finish was called.

Может ли кто-нибудь дать мне очень простой пример того, как использовать два класса вместе?

1 Ответ

5 голосов
/ 17 ноября 2011

Похоже, вы забыли вернуть 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
...