2011-11-16 67 views
3

我想將twisted.web模板一起使用twisted.web資源。twisted.web.resource.Resource with twisted.web.template.Element example

但我只是不明白,如何讓他們一起工作。

我嘗試使用,flatten(request, MyElement(), request.write),但它最終拋出一個異常:Request.write called on a request after Request.finish was called.

有人能向我提供一個非常簡單的例子如何使用兩個班一起?

回答

5

聽起來好像您忘了從render()方法中返回NOT_DONE_YET,因此立即爲您調用finish()。像下面這樣的東西應該是在某個地方本身的扭曲,以幫助準確這一問題:

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 
+0

以供將來參考,用於記錄這個扭曲的錯誤是http://twistedmatrix.com/trac/ticket/4983 – Glyph

+0

謝謝!實際上我有兩行代碼 - 第一個返回了平坦的延遲,第二個返回了NOD_DONE_YET。所以我絕對相信,我返回NOT_DONE_YET! – teferi

+2

請注意,鏈接的錯誤是固定的,並且從twisted.web.template.renderElement' Twisted 12.1.0開始可以使用此位粘合劑。 –