from twisted.python import util
from nevow import inevow,rend,tags
class Root(rend.Page):
addSlash = True
docFactory = loaders.xmlfile(util.sibpath(__file__, 'main.html'))
def data_ip(self, ctx, data):
return inevow.IRequest(ctx).client.host
def render_header(self, ctx, data):
return ctx.tag[Header(data)]
def render_sidebar(self, ctx, data):
# This is only a different way of using a Fragment
# you can either fill a slot or return it from a
# render_* method
ctx.tag.fillSlots('main_sidebar', SideBar())
return ctx.tag
def render_content(self, ctx, data):
return ctx.tag[Content()]
class Header(rend.Fragment):
docFactory = loaders.stan(
t.invisible[
t.p(render=t.directive("ip"))["Welcome IP: "]
]
)
def render_ip(self, ctx, data):
return ctx.tag[data]
class SideBar(rend.Fragment):
docFactory = loaders.stan(
t.ul[
t.li["Menuitem 1"],
t.li["Menuitem 2"],
t.li["Menuitem 3"],
]
)
class Content(rend.Fragment):
docFactory = loaders.stan(
t.p["""Hi, this page is composed thanks to Fragments.
A Fragment allows the programmer to dispatch the composition of the
page to many different objects that represent a logical entity inside
the page. The Fragment can be used just like any other piece of stan
plus it understands render_* and data_* methods.
For additional questions come in #twisted.web"""]
)
|