web2py下拉菜单从主数据库和子类别的数据库生成

时间:2014-01-21 14:42:13

标签: python menu web2py

我一直在尝试从我的数据库中创建一个包含主要类别和子类别的下拉菜单。例如,动物将成为主要的狗和猫作为潜艇。我还有一个我首先设置的菜单的主标题。基本上我无法正确使用代码来正确地继续格式化。

我的db.py:

db.define_table('store_categories',
Field('maincategory', 'string'),
Field('subcategory', 'string'),
Field('description', 'text'))

Menu.py:

response.menu = [(T('Catalog'), False, '')]
maininfo=db(db.store_categories.subcategory=='').select(db.store_categories.maincategory)
for maincat in maininfo:
    response.menu.append([maincat.maincategory,False,'link'],)
    for subcat in db(db.store_categories.subcategory!='').select(db.store_categories.subcategory):
        response.menu[-1].append([(T(subcat.subcategory)),False,'link'])

我的数据库填充如下:(我删除了其他字段上的store_categories以使其适合)

store_categories.id; .maincategory; .subcategory;   .description
1                    Animals                         Animals Main
2                    Animals        Dogs    
4                    Animals        Cats    

当迭代没有片的“-1”时,它会显示一个菜单,但是一个简单的静态菜单,所有4个条目都是直接的(没有下拉列表)但是我想要一个静态生成的下拉菜单:

    response.menu2 = [(T('Catalog'), False, '', [
                     (T('Animals'), False, '/beta/default/Animals', [
                     (T('Dogs'), False, '/beta/default/Dogs'),
                     (T('Cats'), False, '/beta/default/Cats'),
                     ])
                     ]
                     )]

在shell中看起来像这样:

[(<lazyT 'Catalog'>,
  False,
  '',
  [(<lazyT 'Animals'>,
    False,
    '/beta/default/Animals',
    [(<lazyT 'Dogs'>, False, '/beta/default/Dogs'),
    (<lazyT 'Cats'>, False, '/beta/default/Cats')])])]

不幸的是,无论我尝试哪些变化,我都无法在我的代码中重现这一点,并且字面上所有变体都会在web2py的票证中产生“解包所需的超过1个值”。

基本上在shell中我的代码产生了这个:

[(<lazyT 'Catalog'>, False, ''),
 ['Animals',
  False,
  'link',
  [<lazyT 'Dogs'>, False, 'link'],
  [<lazyT 'Cats'>, False, 'link']]]

我可以看到一些差异,但是我无法重现相同的结构。我在查看关于菜单的web2py章节之后尝试修改我的代码,但我遵循的格式(据我所知)仍然出错。此外,我尝试手动重新创建格式,并最终使用menu.py作为一种格式来关注,因为即使从书中复制/粘贴格式的示例也会失败。我也审查了这些文章以寻求帮助(不幸的是,大多数文章都没有定论,但我想在先问任何地方之前先尝试先搜索一下):

http://article.gmane.org/gmane.comp.python.web2py/121092/match=generate+menu

hXXp://www.web2pyslices.com/slice/show/1330/dynamic-menu

hXXps://groups.google.com/forum/# Searchin的/ web2py中/菜单$ 20generate |排序:日期|法术:假/ web2py中/ fbegfZ9VGys / O5jtwjXNYdMJ

非常感谢所有人的帮助。感谢所有人。

1 个答案:

答案 0 :(得分:0)

奇怪没有人可以回答甚至建议,但我相信你们中的许多人都有类似的风格菜单。无论如何,web2py的创建者帮助了我,他提供的解决方案是:

def menu_rec(items):
    return [(x.title,None,URL('shop', 'category',
        args=pretty_url(x.id, x.slug)), menu_rec(x.children)) for x in items or []]

哪个效果很好。