Use the lazy variant that gets evaluated as late as possible:
tg.lurl()
Am Freitag, 3. Mai 2013 07:16:55 UTC+2 schrieb Shane:
>
> Hello,
>
> I am building a JBar menubar widget for a TG application. I was planning
> to build different menubars by subclassing a base JBar(Widget) class and
> modifying the template. The problem is that I need to use tg.url and
> request objects to modify the menu from the controller. When I call the
> display() method on my *HomeMenuBar*, I get:
>
> *UndefinedError: "request" not defined*
>
> So, I'm not getting access to request (or tg.url) in the environment of my
> widget template. How do I do this?
>
> To summarize what is happening (ToscaWidgets 0.9.12, TurboGears2 2.2.0):
>
> *class HomeMenuBar (JBar):*
> * template=('''*
> * <html xmlns="http://www.w3.org/1999/xhtml"*
> * xmlns:py="http://genshi.edgewall.org/"*
> * xmlns:xi="http://www.w3.org/2001/XInclude"*
> * py:attrs="attrs" *
> * py:strip="">*
> * *
> * <ul class="${menu_css}">*
> * <li><a py:if="request.identity"
> href="${tg.url('/about')}">About</a></li> *
> * <li><a py:if="request.identity" href='/pdf/User
> Manual.pdf'>Help</a></li>*
> * <li><a py:if="request.identity" id="login"
> class="loginlogout" href="${tg.url('/logout_handler')}">Logout</a></li>*
> * </ul>*
> * *
> * </html>*
> * ''')*
> *home_menu_bar=HomeMenuBar('home_menu')*
>
> I create the object once in my widgets.MenuBar.py and pass from the
> controller to another template in the tmpl_context:
>
> *@expose('MyApp.templates.TableView')*
> *@expose('json')*
> *def home (self, *args, **kw):*
> * ...*
> * tmpl_context.menu_bar=MenuBars.home_menu_bar*
> * return {}*
>
> In my *TableView.html *template, I include:
>
> *<xi:include href="master.html" />*
>
> which finally brings in the menu bar across the top of each page:
> ....
> *<div py:if="hasattr(tmpl_context, 'menu_bar')" id="menu_bar_container">*
> * ${tmpl_context.menu_bar.display()}*
> *</div>*
> ....
>
> I had previously passed a genshi method name from controller to template
> in order to accomplish the same task, but I wanted to put the menubar into
> a widget, as this allows more flexibility to modify the menu in the
> controller.
>
> Thank you,
>
> Shane
>
--
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/turbogears?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.