Re: Making minor changes to auth.navbar()

969 views
Skip to first unread message

Anthony

unread,
Jul 20, 2012, 10:58:30 AM7/20/12
to web...@googlegroups.com, mnew...@gmail.com
Unfortunately, the navbar isn't very flexible. However, it returns an HTML helper object (a SPAN with several components), so you can manipulate it after creation. The part after "Welcome" is the second component of the span, so:

navbar = auth.navbar()
if auth.user:
    navbar
[1] = auth.user.email #replace first name with email
   
del navbar[0] # remove "Welcome"

Anthony

On Friday, July 20, 2012 4:35:25 AM UTC-4, Matt Newton wrote:
Is there a simple way to make changes to the auth.navbar() helper object?

For example, the default for a logged in user is:

"Welcome {First Name} Logout | Profile | Password"

I would like to change it to:

'{Email} | Logout | Profile | Password

but I'm not sure how to request the information I want when it's masked by the helper object.

Thanks for your help.

pbreit

unread,
Jul 20, 2012, 7:29:37 PM7/20/12
to web...@googlegroups.com, mnew...@gmail.com
I just write my own:

def user_bar():
    action
= '/user'
   
if auth.user:
        logout
=A('logout', _href=action+'/logout')
        profile
=A('profile', _href=action+'/profile')
        password
=A('change password', _href=action+'/change_password')
        bar
= SPAN(auth.user.email, ' | ', profile, ' | ', password, ' | ', logout, _class='auth_navbar')
   
else:
        login
=A('login', _href=action+'/login')
       
register=A('register',_href=action+'/register')
        lost_password
=A('lost password', _href=action+'/request_reset_password')
        bar
= SPAN(' ', login, ' | ', register, ' | ', lost_password, _class='auth_navbar')
   
return bar

Lewis

unread,
Dec 14, 2012, 6:37:45 PM12/14/12
to web...@googlegroups.com, mnew...@gmail.com
I understand that code and put it in my controller.

But, where do I put the reference to it in the view (the base view that is extended):

By default it says:  <div id="navbar">{{='auth' in globals() and auth.navbar(separators=(' ',' | ',''))}}</div>

I assume that user.bar must replace auth.navbar(...).

But, I don't see how.  An arbitrary function in a controller cannot do the same things that the auth class method does.  The other problem is that my user.bar() is not in default so I must also reference the controller file.  Using URL('...', '....') in place of auth.navbar did not work.

I am sorry:  when you go mucking about substituting for internal functions/classes of web2py it is very unclear what one must do because the behavior of the internal classes is a bit obscure.

Thank you.

Lewis

unread,
Dec 14, 2012, 10:39:05 PM12/14/12
to web...@googlegroups.com, mnew...@gmail.com
I solved this.

Rohan Prinja

unread,
Dec 5, 2013, 6:30:54 AM12/5/13
to web...@googlegroups.com, mnew...@gmail.com
How did you solve it? I'm facing the same problem - deciding where to place the navbar code I wrote.

Sébastien Loix

unread,
May 13, 2014, 12:21:54 PM5/13/14
to web...@googlegroups.com, mnew...@gmail.com
Hello Lewis,
I am having the same issue. Could you tell us where did you put the code for the navbar?
Thanks!
Sebastian

cowbert

unread,
Jun 29, 2014, 11:13:51 PM6/29/14
to web...@googlegroups.com
It goes into a model file after auth has been instantiated. Everything in the model is globalised as models are executed every time the app is accessed. Example in db.py:

auth = Auth(db)
...
def user_bar():
   bar = <reference to auth.user to generate nav bar...>
   return bar

then you would call user_bar() in place of auth.navbar()
Reply all
Reply to author
Forward
0 new messages