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.


Reply via email to