Viewing file: fragments.py (1.52 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from twisted.python import util from nevow import inevow, rend, tags as t, loaders
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"""] )
|