2013-01-15 167 views
1

我试图像Django的显示菜单/子菜单

Menu1 
Menu2 

    SubMenu1 
    SubMenu2 
    SubMenu3 

Menu3 
    SubMenu4 
    SubMenu5 
    SubMenu6 
Menu4 

以表格的形式显示菜单和子菜单到目前为止,我能想出下面的代码,但它没有显示任何记录。

Views.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)) 

Models.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)) 

template.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 %} 

现状我具有与4表5行作为parent_menu = 0和1作为parent_menu = 1(存在)。

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

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

但是当我打印菜单里面的for循环,只打印1个菜单对象 菜单对象

能否请您指教一下我做错了或有任何其他方式来达到同样的事情?

回答

0

这不是访问你的模型方法的正确途径,首先你必须有,你的方法属于 防爆类的对象:

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

富只是它必须是一个例子一些值与你的id相对应。

然后通过对象调用你的models.py文件创建的方法传递必需的参数 例:

menus = m.getMenuListing(id) 

现在,你必须在变量菜单正确的数据。 试试这种方式。

0

这行..

return dict(zip(menus, result))

menusresult长度不是平等的,因此zip() function as described here ..

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

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

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

+0

任何建议,我怎么能在这里实现解决方法?因为按照要求,我可能有菜单子菜单。 –