[Twisted-web] Can't subclass when docFactory is a loaders.stan instance.

Donovan Preston dp at ulaluma.com
Thu Sep 9 15:30:03 MDT 2004


On Sep 9, 2004, at 3:06 PM, Patrick B. Day wrote:

> Is there anyway when constructing a page using stan to use render_*
> methods which are defined in the subclass?

The same way the HTML templates cause an invocation of a render_* 
method -- by setting the render special on a Tag to a directive. Sorry 
it's not better documented:

class Foo(Page):
     docFactory = rend.stan(tags.html[
     tags.head[
          tags.title(render=tags.directive('title'))],
     tags.body[
          tags.h1(render=tags.directive('header')),
          tags.div(render=tags.directive('body'))]]


class Bar(Foo):
     def render_title(self, ctx, data): return ctx.tag["Hello Title"]
     def render_header(self, ctx, data): return ctx.tag["Hello Header"]
     def render_body(self, ctx, data): return ctx.tag["Hello Body"]


By the way, this is a perfect example of where you would want to use 
the macro special, when it is implemented. Page would have to have a 
metaclass that cloned and compiled a unique copy of the superclass' 
docFactory, but after that all the non-dynamic nodes (nodes without a 
render method) would be optimized into contiguous string runs. As it is 
now, the render methods run every time the page is hit, which isn't too 
big of a deal but is slightly slower.

dp




More information about the Twisted-web mailing list