1

メニューとサブメニューを次のような表形式で表示しようとしています

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を印刷しようとすると、show4メニューオブジェクトが表示されます。

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

しかし、forループ内でメニューを印刷すると、1つのメニューオブジェクトのみが印刷されます。メニューオブジェクト

私が間違っていることを教えていただけますか、それとも同じことを達成する他の方法はありますか?

4

2 に答える 2

0

これは、モデル メソッドにアクセスする正しい方法ではありません。まず、メソッドが属するクラスのオブジェクトが必要です。例:

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 に答える