Creating a navigation bar

70 views
Skip to first unread message

isi_jca

unread,
Nov 22, 2013, 8:35:10 PM11/22/13
to web2py-...@googlegroups.com
Hola!!!

Accedí al siguiente link
http://my.safaribooksonline.com/book/programming/python/9781849515467/building-your-first-application/ch02lvl1sec33

y seguí las instrucciones para crear un navbar dinámico, pero al momento de ejecutarlo me muestra el error que se encuentra en el archivo adjunto, ¿alguién tiene alguna idea de que esta pasando?.

Saludos y gracias.

navbar_error.pdf

samuel bonill

unread,
Nov 22, 2013, 8:51:43 PM11/22/13
to web2py-...@googlegroups.com
mira el index.htmll, dice que hay un error en la linea 70...


--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a web2py-usuari...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

isi_jca

unread,
Nov 23, 2013, 9:48:09 AM11/23/13
to web2py-...@googlegroups.com
Samuel:

En la linea 70 esta esta instrucción: response.write(MENU(response.menu,_class='sf-menu')), que pertenece al layout.hmtl. Dentro de modelos tengo un archivo navbar.py con el siguiente contenido y ahí creo que esta el problema, en este caso usa una función como generadora, pero no tengo mucha experiencia con Python y no determinar bien que esta pasando.

# coding: utf8 db.define_table('navbar', Field("title", "string"), Field("url", "string", requires=IS_EMPTY_OR(IS_URL())), Field("c", label="Controller"), Field("f", label="Function"), Field("args", label="Arguments"), Field("sortable", "integer"), Field("parent_id", "reference navbar"), format="%(title)s", ) def get_sub_menus(parent_id, default_c=None, default_f=None): children = db(db.navbar.parent_id==parent_id) for menu_entry in children.select(orderby=db.navbar.sortable): # get action or use defaults: c = menu_entry.c or default_c f = menu_entry.f or default_f # is this entry selected? (current page) sel = (request.controller==c and request.function==f and (request.args and request.args==menu_entry.args or True)) # return each menu item yield (menu_entry.title),sel, menu_entry.url or URL(c, f, args=menu_entry.args),get_sub_menus(menu_entry.id,c,f) response.menu= get_sub_menus(parent_id=0)

Federico Ferraro

unread,
Nov 23, 2013, 11:03:46 AM11/23/13
to web2py-...@googlegroups.com
Hola , el generador es el que esta marcado con :

yield (menu_entry.title),sel, menu_entry.url or URL(c, f, args=menu_entry.args),get_sub_menus(menu_entry.id,c,f)

Tenes datos en las tabla "navbar" ??

Slds ...


--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a web2py-usuari...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.



--
--
Federico Ferraro
Usuario Linux : 482533.
--

isi_jca

unread,
Nov 24, 2013, 3:55:33 PM11/24/13
to web2py-...@googlegroups.com
Hola Federico:

Si tengo datos en la tabla, para cargarla utilice la sgte. función:

if not db(db.navbar).count():
  # create default index entry:
  home_id = db.navbar.insert(title="Home", c="default")

  # create a "Company" leaf with typical options:
  company_id = db.navbar.insert(title="Company", c="company")
  db.navbar.insert(title="About Us", f='about_us',parent_id=company_id)
  db.navbar.insert(title="Mision & Vision", f='mision_vision',parent_id=company_id)
  db.navbar.insert(title="Our Team", f='our_team',parent_id=company_id)

  products_id = db.navbar.insert(title="Products", c="products")
  # Add some "Computers models" to products entry:computers_id = db.navbar.insert(title="Computers", f='computers', parent_id=products_id)
  for model in 'basic', 'pro', 'gamer':
    db.navbar.insert(title="Model %s" % model, args=model, parent_id=computers_id)

		  

Una vez cargada la tabla la idea es que tenga una estructura similar a la que se muestra abajo.

Home
Company
  About Us
  Mission & Vision
  Our Team
Products
  Computers
    Model basic
    Model pro

isi_jca

unread,
Dec 1, 2013, 10:08:51 AM12/1/13
to web2py-...@googlegroups.com
Hola comunidad!!!
Le adjunto el archivo conteniendo la aplicación, con la esperanza de que alguien me ayude a encontrar el error que me muestra en el ticket, estoy usando la versión 2.7.4-stable+timestamp.2013.10.14.15.16.29 (Running on Rocket 1.2.6, Python 2.7.5+) de Web2py y el navegador es Chromiun con Ubuntu 13.10. Saludos y gracias!!!.

El viernes, 22 de noviembre de 2013 22:35:10 UTC-3, isi_jca escribió:
web2py.app.navbar.w2p

Alan Etkin

unread,
Dec 1, 2013, 11:59:52 AM12/1/13
to web2py-...@googlegroups.com
Hola comunidad!!!
Le adjunto el archivo conteniendo la aplicación, con la esperanza de que alguien me ayude a encontrar el error que me muestra en el ticket, estoy usando la versión 2.7.4-stable+timestamp.2013.10.14.15.16.29 (Running on Rocket 1.2.6, Python 2.7.5+) de Web2py y el navegador es Chromiun con Ubuntu 13.10. Saludos y gracias!!!.

¿Esto funcionaba con otras versiones de web2py?
El argumento de MENU no puede ser un generador, los ejemplos de la api son con listas anidadas. De todas formas, si cambiás la línea del cache en nabvar.py por este código

response.menu = cache.ram('navbar_menu', lambda: [item for item in get_sub_menus(parent_id=None)], time_expire=60)

pareciera que funciona correctamente. Esto puede deberse a que hayan descartado el soporte para generadores en MENU o a una errata del cookbook.

Reply all
Reply to author
Forward
0 new messages