[Twisted-web] Standard sequence renderer "loosing" tags?
A. Goryunov
agoryunov at list.ru
Sat Dec 17 14:31:56 MST 2005
Nevermind that - I figured out that the sequence renderer only returns
those tags that have either "pattern" or "render" specials, so it seems
to randomly loose stuff.
A. Goryunov wrote:
> I've noticed that Page.renderString() "swallows" some of the stan
> nodes. I've also tried the example below in an actual Twisted service
> and got the same result. Doing it with an XML template also yields
> erroneous output. Namely, it looses "table", "tr", a couple of "td"
> tags were MIA too I believe, as well as two "input"s.
>
> The code I was using for testing is attached. It's supposed to be a
> library of widgets that are constructed using Fragments and
> render_sequence.
>
> ------------------------------------------------------------------------
>
> from nevow import tags as T
> from nevow import flat, rend, loaders
>
>
>
>
> class TestPage(rend.Page):
> docFactory = loaders.stan(
> T.html[
> T.body[
> T.invisible(render=T.directive("widget"))[
> T.invisible(pattern="widget_name")['PortalContent'],
> T.invisible(pattern="widget_slot")['main_content'],
> T.invisible(pattern="widget_slot")[
> T.invisible(render=T.directive("widget"))[
> T.invisible(pattern="widget_name")['PortalBarVert'],
> T.invisible(pattern="widget_slot")[
> T.invisible(render=T.directive("widget"))[
> T.invisible(pattern="widget_name")['LoginForm'],
> T.invisible(pattern="widget_slot")['Sign in'],
> T.invisible(pattern="widget_slot")['User: '],
> T.invisible(pattern="widget_slot")['Password: '],
> T.invisible(pattern="widget_slot")[T.input(type="submit", name="null", value="Submit")]
> ]
> ]
> ]
> ]
> ]
> ]])
>
> def render_widget(self,ctx,data):
> wName = ctx.tag.onePattern("widget_name").children[0].strip('\n\t ')
> attrs = ctx.tag.allPatterns("widget_slot")
> args = []
> for attr in attrs:
> args.append(T.xml(attr.children))
> try:
> wdgt = globals()[wName](args)
> return ctx.tag[wdgt]
> except IndexError:
> return ctx.tag[T.p(style="font-color : red")["Unknown widget name: %s" % wName]]
>
>
> class LoginForm(rend.Fragment):
> docFactory = loaders.stan(
> T.div(class_="login-form", render=T.directive("sequence"))[
> T.p(class_="small-form-title", pattern="item", render=T.directive('arg')),
> T.form(action="_submit", method="post")[
> T.table(id="login-form-table")[
> T.tr[
> T.td(align="right")[
> T.label(for_="user", pattern="item", render=T.directive('arg'))
> ],
> T.td(align="left")[
> T.input(type="text", name="user",
> class_="login-input")
> ]
> ],
> T.tr[
> T.td(align="right")[
> T.label(for_="pass", pattern="item", render=T.directive('arg'))
> ],
> T.td(align="left")[
> T.input(type="password", name="pass",
> class_="login-input")
> ]
> ],
> T.tr[T.td(colspan="2")],
> T.tr[
> T.td(colspan="2", align="center", pattern="item", render=T.directive('arg'))
> ]
> ]
> ]
> ])
>
> def render_arg(self,ctx,data):
> return ctx.tag[data]
>
> class PortalContent(rend.Fragment):
> docFactory = loaders.stan(
> T.table(id="portal-content", render=T.directive("sequence"))[
> T.tr[
> T.td(class_="portal-content-main", pattern='item', render=T.directive('arg')),
> T.td(class_="portal-content-sidebar", id="portal-sidebar-right",
> pattern="item", render=T.directive("arg"))
> ]
> ])
>
> def render_arg(self,ctx,data):
> return ctx.tag[data]
>
> class PortalBarVert(rend.Fragment):
> docFactory = loaders.stan(
> T.table(class_="portal-bar-vertical", render=T.directive('sequence'))[
> T.tr(pattern='item', render=T.directive('arg'))
> ])
>
> def render_arg(self,ctx,data):
> return ctx.tag[T.td(class_='vert-sidebar-slot')[data]]
>
>
>
> page = TestPage()
> df = page.renderString()
> def printPage(result):
> print result
>
> def printErr(err):
> print err
> df.addCallback(printPage)
> df.addErrback(printErr)
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Twisted-web mailing list
> Twisted-web at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>
More information about the Twisted-web
mailing list