[Twisted-web] Cannot render a LivePage more than once

Juanjo Conti jjconti at gmail.com
Thu Jul 9 14:27:54 EDT 2009


I solved the problem redefining child_ter and child_graph as follow:

    def child_ter(self, ctx):
        return TerPage()

    def child_graph(self, ctx):
        return GraphPage()

Thanks,

2009/7/9 Juanjo Conti <jjconti at gmail.com>:
> I've actually realised that the problem is happening when I use this IndexPage:
>
> class IndexPage(rend.Page):
>
>    def __init__ ( self, *args, **kwargs ):
>        rend.Page.__init__ ( self, *args, **kwargs )
>        self.ter = TerPage()
>        self.graph = GraphPage()
>
>
>    docFactory = loaders.stan (
>        T.html [ T.head ( title = 'Indice' ),
>                 T.body [ T.h1 [ "Pagina principal" ],
>                          T.p [ "Ir a ",
>                                T.a ( href = 'ter' ) [ "TER" ],
>                                " or ",
>                                T.a ( href = 'grapf' ) [ "graph" ],
>                                ],
>                          ]
>                 ]
>        )
>
>
>    def child_ter(self, ctx):
>        return self.ter
>
>    def child_graph(self, ctx):
>        return self.graph
>
> from nevow import appserver
> site = appserver.NevowSite(IndexPage())
> reactor.listenTCP(8009, site)
>
> I can reaload the IndexPage, but can't the Terpage or GraphPage.
>
> Thanks,
>
> 2009/7/9 Juanjo Conti <jjconti at gmail.com>:
>> HI! I'm using LivePage from Nevow.Athena like this:
>>
>> class TerPage(LivePage):
>>    docFactory = loaders.stan(T.html[
>>        T.head(render=T.directive('liveglue')),
>>        T.body(render=T.directive('myElement'))])
>>
>>    def beforeRender(self, ctx):
>>        d = self.notifyOnDisconnect()
>>        d.addErrback(self.disconn)
>>
>>    def disconn(self, reason):
>>        del lectores[hash(self.element)]
>>
>>    def render_myElement(self, ctx, data):
>>        self.element = TempElement()
>>        self.element.setFragmentParent(self)
>>        return ctx.tag[self.element]
>>
>>    def child_(self, ctx):
>>        return TerPage()
>>
>>
>> site = appserver.NevowSite(TerPage())
>> reactor.listenTCP(8009, site)
>>
>> When I load the page for first time, it's rendered ok. But if I hit
>> the reload button or someone access it from other computer, this
>> exception is shown:
>>
>> Cannot render a LivePage more than once.
>>
>> Could you point me the correct way of doing it?
>>
>> Thanks,
>>
>> --
>> Juanjo Conti
>>
>
>
>
> --
> Juanjo Conti
>



-- 
Juanjo Conti



More information about the Twisted-web mailing list