我正在尝试以表格格式显示菜单和子菜单,如
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 %}
现状我在表中有5行,其中4行为parent_menu = 0,1为parent_menu = 1(存在)。
当我尝试打印mainMenus时,显示4菜单对象。
< Menu: Menu object >, < Menu: Menu object >, < Menu: Menu object >, < Menu: Menu object >
但是当我在for循环中打印菜单时,它只打印1个Menu对象 菜单对象
你能告诉我我做错了什么,还是有其他方法可以达到同样的目的?
答案 0 :(得分:0)
这不是访问模型方法的正确方法,首先你必须拥有你的方法所属的类的对象 例如:
m = Menu.objects.get(id=foo)
foo只是一个例子,它必须是与你的id相对应的一些值。
然后通过传递所需参数的对象调用您在models.py文件上创建的方法 例如:
menus = m.getMenuListing(id)
现在您在变量菜单中拥有正确的数据。 试试这种方式。
答案 1 :(得分:0)
在这一行..
return dict(zip(menus, result))
您的menus
和result
长度不相等,因此zip() function as described here ..
返回的列表的长度被截断为最短的长度 论证序列。
字典将截断到菜单的长度。
除了你的html模板,请尝试使用getMenuListing()结果进行单元测试。