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

2024-10-03 02:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试从我的数据库创建一个下拉菜单,其中有主要的类别和子类别。例如,动物将是主要的,狗和猫作为潜艇。我还有一个菜单的主标题,我首先设置。基本上,我不能得到正确的代码继续格式正确。在

我的数据库公司名称:

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

在菜单.py公司名称:

^{pr2}$

我的数据库是这样填充的:(我删除了其他字段上的store_类别以使其适合)

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'),
                     ])
                     ]
                     )]

在外壳中是这样的:

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

不幸的是,无论我尝试了哪些变体,我都无法在代码中重现这一点,而且几乎所有的变体都会在web2py的票证中产生“需要解包的多个值”之类的错误。在

实际上,在shell中,我的代码会生成以下内容:

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

我可以看到一些不同之处,但是我无法复制相同的结构。在回顾了web2py关于菜单的章节之后,我试图修改我的代码,但是我遵循的格式(据我所知)仍然错误。此外,我尝试手动重新创建格式,最后使用菜单.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/#!搜索/web2py/menu$20generate|排序:日期|拼写:false/web2py/fbefz9vgys/O5jtwjXNYdMJ在

感谢所有人的帮助。在


Tags: store代码数据库falsedefault格式菜单类别
1条回答
网友
1楼 · 发布于 2024-10-03 02:32:37

奇怪的是,没有人能回答,甚至没有人建议,但我相信你们中的许多人都有类似的风格菜单。无论如何,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 []]

效果很好。在

相关问题 更多 >