有的時候,我們的菜單很多很雜,想要把菜單進行分組以方便管理,如下
前一篇博文已經詳細講解了如何菜單自定義排序,自定義分組和排序其實寫法類似:
要實現上面這個功能,分為以下幾步:
1、 我們需要定義一個變量用來確定當前app屬於哪個組,所以在每個app所屬的apps.py中加一個變量 menu_name = "分組名" 如下:
2、我們知道,xadmin中CommAdminView是用戶已經登錄后顯示的View,也是所有登陸后View的基礎類。
該View主要作用是創建了Xadmin的通用元素,例如:系統菜單,用戶信息等。插件可以通過注冊該View來修改這些信息。
所以我們可以自頂一個一個類,里面重寫 get_nav_menu 方法,加入我們自定義的變量menu_cate,用於在html中分組使用
然后將我們自定義的類注冊到xadmin中,xadmin.site.register(views.CommAdminView, 自定義類名)
3、修改html
查看CommAdminView源碼,我們還可以看到,它的基礎模板是base_site.html, 同時還指明menu_template = 'xadmin/includes/sitemenu_default.html'
在base_site.html中,有個div是用來承載左側菜單欄的:
它里面引用了menu_template,所以我們直接重寫sitemenu_default.html即可,下面先寫了三個div容器,分別用於承載三個分組,里面的內容由它的繼承者 sitemenu_accordion.html來加入。
然后在sitemenu_default.html的繼承者sitemenu_accordion.html中分別編寫我們自己定義的block: navbar_md、navbar_md_forum 和 navbar_md_wechat
下面以navbar_md為例,代碼如下:
循環所有的菜單,如果當前菜單的menu_cate和我們分組的名稱相等,即歸為一個組,其他組亦然。