1

我正在尝试以表格格式显示菜单和子菜单,例如

Menu1
Menu2

   SubMenu1
   SubMenu2
   SubMenu3

Menu3
   SubMenu4
   SubMenu5
   SubMenu6
Menu4

到目前为止,我能够提出以下代码,但它没有显示任何记录。

视图.py

def getCompleteMenuList():
    return Menu.objects.getMenuListing(id)

#mainMenuObj=Menu.objects.getMenuListing(id)
return render_to_response('manageMenu.html', {'title': menu_title,'name':name,'mainMenu':getCompleteMenuList,},context_instance=RequestContext(request))

模型.py

def getMenuListing(self, id):
    mainMenus = self.filter(parent_menu=0,business=id).order_by('order')
    result = []
    menus = []

    for menu in mainMenus:
        menus.append(menu)
        submenu = self.filter(parent_menu=menu,business=id).order_by('order')
        if submenu.exists():
            result.append(submenu)

    return dict(zip(menus, result)) 

模板.html

{% with mainMenu.items as pop_menus %}
    {% for key, value in pop_menus %}
    display main menu rows
        {% for data in value %}
    display sub menu rows                                   
        {% endfor %}
    {% endfor %}    
{% endwith %}   

当前情况 我在表中有 5 行,其中 4 行作为 parent_menu = 0,1 行作为 parent_menu = 1(存在)。

当我尝试打印 mainMenus 时,它的 show 4 菜单对象。

< Menu: Menu object >, < Menu: Menu object >, < Menu: Menu object >, < Menu: Menu object >

但是当我在 for 循环中打印菜单时,它只打印 1 个菜单对象菜单对象

你能告诉我我做错了什么还是有其他方法可以实现同样的目标?

4

2 回答 2

0

这不是访问模型方法的正确方法,首先您必须拥有您的方法所属的类的对象 Ex:

m = Menu.objects.get(id=foo)

foo 只是一个示例,它必须是与您的 id 对应的某个值。

然后通过传递所需参数的对象调用您在 models.py 文件上创建的方法,例如:

menus = m.getMenuListing(id)

现在您在变量菜单中有了正确的数据。试试这个方法。

于 2013-01-15T07:35:16.393 回答
0

在这一行..

return dict(zip(menus, result))

menusresult长度不相等,因此这里描述的 zip() 函数..

返回的列表在长度上被截断为最短参数序列的长度。

字典将被截断为菜单的长度。

除了您的 html 模板,请尝试使用 getMenuListing() 结果进行单元测试。

于 2013-01-15T07:39:44.547 回答