2013-01-15 236 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

任何建議,我怎麼能在這裏實現解決方法?因爲按照要求,我可能有菜單子菜單。 –