def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = SortedDict() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_label = model._meta.app_label model_dict = { 'title': unicode(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: nav_menu[app_key] = { 'title': self.apps_label_title.get(app_label.lower(), unicode(app_label.title())), 'menus': [model_dict], } app_menu = nav_menu[app_key] if ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = nav_menu.values() nav_menu.sort(key=lambda x: x['title']) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = SortedDict() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_label = model._meta.app_label app_icon = None model_dict = { 'title': unicode(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # Find app title app_title = unicode(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: mods = model.__module__.split('.') if len(mods) > 1: mod = '.'.join(mods[0:-1]) if mod in sys.modules: mod = sys.modules[mod] if 'verbose_name' in dir(mod): app_title = getattr(mod, 'verbose_name') elif 'app_title' in dir(mod): app_title = getattr(mod, 'app_title') #find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = { 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if app_icon: app_menu['first_icon'] = app_icon elif ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = nav_menu.values() nav_menu.sort(key=lambda x: x['title']) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = OrderedDict() for model, model_admin in self.admin_site._registry.items(): only_admin_show = getattr(model_admin, 'only_admin_show', False) hidden_menu = getattr(model_admin, 'hidden_menu', False) is_admin = self.user.is_superuser if hidden_menu: if (is_admin and not only_admin_show) or (not is_admin): continue app_label = model._meta.app_label app_icon = None model_dict = { 'title': smart_text(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # Find app title app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: app_title = smart_text( apps.get_app_config(app_label).verbose_name) # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = { 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if app_icon: app_menu['first_icon'] = app_icon elif ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = list(nav_menu.values()) nav_menu.sort(key=lambda x: x['title']) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): """ 返回网站菜单,如果 `get_site_menu` 返回的结果不是 None ,那么将把其返回结果作为菜单的第一部分,而后会补全没有出现的 Model 列表页菜单项, 如果 `get_site_menu` 返回为 None, 那么将自动根据 App 和 Model 生成两级的菜单。 :rtype: 格式见 `get_site_menu` 返回格式 """ site_menu = list(self.get_site_menu() or []) had_urls = [] # 选出所有已经存在的菜单项的 URL,后期自动生成菜单时会排除这些项。 def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = OrderedDict() # 使用有序 dict,保证每次生成的菜单顺序固定 for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_label = model._meta.app_label app_icon = None model_dict = { 'title': smart_text(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: # 过如该url已经在之前的菜单项中存在,就跳过该项 continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # Find app title app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: app_title = smart_text( apps.get_app_config(app_label).verbose_name) # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = { 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if app_icon: app_menu['first_icon'] = app_icon elif ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = list(nav_menu.values()) nav_menu.sort(key=lambda x: x['title']) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): """Method to generate the menu""" _menu = self.get_site_menu() if _menu: site_menu = list(_menu) else: site_menu = [] had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) # get base menu with apps already configurated nav_menu = collections.OrderedDict(self.get_apps_menu()) for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_config = getattr(model_admin, 'app_config', None) app_label = app_config.name if app_config else model._meta.app_label model_dict = { 'title': smart_text(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # first time the app is seen # Find app title if app_config: app_title = model_admin.app_config.verbose_name else: app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: mods = model.__module__.split('.') if len(mods) > 1: mod = '.'.join(mods[0:-1]) if mod in sys.modules: mod = sys.modules[mod] if 'verbose_name' in dir(mod): app_title = getattr(mod, 'verbose_name') elif 'app_title' in dir(mod): app_title = getattr(mod, 'app_title') nav_menu[app_key] = { 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] # after app menu is done, join it to the site menu nav_menu = nav_menu.values() site_menu.extend(nav_menu) for menu in site_menu: menu['menus'].sort(key=sortkeypicker(['order', 'title'])) site_menu.sort(key=lambda x: x['title']) return site_menu
def get_nav_menu(self): """Method to generate the menu""" _menu = self.get_site_menu() if _menu: site_menu = list(_menu) else: site_menu = [] had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) # get base menu with apps already configurated nav_menu = SortedDict(self.get_apps_menu()) for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_config = getattr(model_admin, 'app_config', None) app_label = app_config.name if app_config else model._meta.app_label model_dict = { 'title': unicode(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # first time the app is seen # Find app title if app_config: app_title = model_admin.app_config.verbose_name else: app_title = unicode(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: mods = model.__module__.split('.') if len(mods) > 1: mod = '.'.join(mods[0:-1]) if mod in sys.modules: mod = sys.modules[mod] if 'verbose_name' in dir(mod): app_title = getattr(mod, 'verbose_name') elif 'app_title' in dir(mod): app_title = getattr(mod, 'app_title') nav_menu[app_key] = { 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] # after app menu is done, join it to the site menu nav_menu = nav_menu.values() site_menu.extend(nav_menu) for menu in site_menu: menu['menus'].sort(key=sortkeypicker(['order', 'title'])) site_menu.sort(key=lambda x: x['title']) return site_menu
def get_nav_menu(self): print 'tst' site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = SortedDict() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_label = model._meta.app_label app_icon = None model_dict = { 'title': unicode(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue ##Change here: Xuan Wei - 2015/12/5 objectName = model._meta.object_name if groupDict.has_key(objectName): groupName = groupDict[objectName] else: groupName = app_label app_key = "app:%s" % groupName ##Orignal one #app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # Find app title app_title = unicode(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: mods = model.__module__.split('.') if len(mods) > 1: mod = '.'.join(mods[0:-1]) if mod in sys.modules: mod = sys.modules[mod] if 'verbose_name' in dir(mod): app_title = getattr(mod, 'verbose_name') elif 'app_title' in dir(mod): app_title = getattr(mod, 'app_title') #find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] ##Change here: Xuan Wei - 2015/12/5 nav_menu[app_key] = { 'title': groupName, 'menus': [model_dict], } #Original one #nav_menu[app_key] = { # 'title': app_title, # 'menus': [model_dict], #} app_menu = nav_menu[app_key] if app_icon: app_menu['first_icon'] = app_icon elif ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = nav_menu.values() nav_menu.sort(key=lambda x: x['title']) ##Change here:add, Xuan Wei - 2015/12/6 temp = {} for menu in nav_menu: if menu['title'] != 'reversion': if menu['title'] != 'auth': site_menu.append(menu) else: temp = menu site_menu.append(temp) #original one #site_menu.extend(nav_menu) #change here: add icon for menu in nav_menu: if iconDict.has_key(menu['title']): menu['first_icon'] = iconDict[menu['title']] return site_menu
def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if "url" in menu: had_urls.append(menu["url"]) if "menus" in menu: for m in menu["menus"]: get_url(m, had_urls) get_url({"menus": site_menu}, had_urls) nav_menu = OrderedDict() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, "hidden_menu", False): continue app_label = model._meta.app_label app_icon = None model_dict = { "title": unicode(capfirst(model._meta.verbose_name_plural)), "url": self.get_model_url(model, "changelist"), "icon": self.get_model_icon(model), "perm": self.get_model_perm(model, "view"), "order": model_admin.order, } if model_dict["url"] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]["menus"].append(model_dict) else: # Find app title app_title = unicode(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: mods = model.__module__.split(".") if len(mods) > 1: mod = ".".join(mods[0:-1]) if mod in sys.modules: mod = sys.modules[mod] if "verbose_name" in dir(mod): app_title = getattr(mod, "verbose_name") elif "app_title" in dir(mod): app_title = getattr(mod, "app_title") # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = {"title": app_title, "menus": [model_dict]} app_menu = nav_menu[app_key] if app_icon: app_menu["first_icon"] = app_icon elif ("first_icon" not in app_menu or app_menu["first_icon"] == self.default_model_icon) and model_dict.get( "icon" ): app_menu["first_icon"] = model_dict["icon"] if "first_url" not in app_menu and model_dict.get("url"): app_menu["first_url"] = model_dict["url"] for menu in nav_menu.values(): menu["menus"].sort(key=sortkeypicker(["order", "title"])) nav_menu = nav_menu.values() nav_menu.sort(key=lambda x: x["title"]) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = OrderedDict() # 添加 menus_ = self.admin_site._registry.items() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_label = model._meta.app_label app_icon = None model_dict = { 'title': smart_text(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # Find app title app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: app_title = smart_text( apps.get_app_config(app_label).verbose_name) # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] # 隐藏 # nav_menu[app_key] = { # 'title': app_title, # 'menus': [model_dict], # } else: appL = apps.get_app_config(app_label) app_title = smart_text( apps.get_app_config(app_label).verbose_name) # added by Fiona for menu ordering if app_label == "auth": app_index = len(menus_) - 1 elif app_label == "xadmin": app_index = len(menus_) - 2 else: app_index = appL.orderIndex # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = { "orderIndex": app_index, 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if app_icon: app_menu['first_icon'] = app_icon elif ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = list(nav_menu.values()) # nav_menu.sort(key=lambda x: x['title']) 隐藏 # 左侧菜单自定义排序新增 nav_menu.sort(key=sortkeypicker(['orderIndex'])) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if "url" in menu: had_urls.append(menu["url"]) if "menus" in menu: for m in menu["menus"]: get_url(m, had_urls) get_url({"menus": site_menu}, had_urls) nav_menu = OrderedDict() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, "hidden_menu", False): continue app_label = model._meta.app_label app_icon = None model_dict = { "title": smart_text(capfirst(model._meta.verbose_name_plural)), "url": self.get_model_url(model, "changelist"), "icon": self.get_model_icon(model), "perm": self.get_model_perm(model, "view"), "order": model_admin.order, } if model_dict["url"] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]["menus"].append(model_dict) else: # Find app title app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: app_title = smart_text( apps.get_app_config(app_label).verbose_name) # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = { "title": app_title, "menus": [model_dict], } app_menu = nav_menu[app_key] if app_icon: app_menu["first_icon"] = app_icon elif ("first_icon" not in app_menu or app_menu["first_icon"] == self.default_model_icon) and model_dict.get("icon"): app_menu["first_icon"] = model_dict["icon"] if "first_url" not in app_menu and model_dict.get("url"): app_menu["first_url"] = model_dict["url"] for menu in nav_menu.values(): menu["menus"].sort(key=sortkeypicker(["order", "title"])) nav_menu = list(nav_menu.values()) nav_menu.sort(key=lambda x: x["title"]) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = OrderedDict() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_label = model._meta.app_label app_icon = None model_dict = { 'title': smart_text(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # Find app title app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: app_title = smart_text(apps.get_app_config(app_label).verbose_name) # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = { 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if app_icon: app_menu['first_icon'] = app_icon elif ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = list(nav_menu.values()) #菜单管理下子菜单 # from app.models import Group # manage_menu_items=nav_menu[6].get('menus') # group_banner={ # "title":"部门hahah", # "url":self.get_model_url(Group,'changelist'), # 'icon':'fa fa-bar-chart-o' # } # manage_menu_items.insert(0,group_banner) # # nav_menu[6]['menus']=manage_menu_items # print('nav_menu is %s'%nav_menu) #nav_menu.sort(key=lambda x: x['title']) site_menu.extend(nav_menu) return site_menu
def get_nav_menu(self): """Method to generate the menu""" _menu = self.get_site_menu() if _menu: site_menu = list(_menu) else: site_menu = [] had_urls = [] def get_url(menu, had_urls): if "url" in menu: had_urls.append(menu["url"]) if "menus" in menu: for m in menu["menus"]: get_url(m, had_urls) get_url({"menus": site_menu}, had_urls) # get base menu with apps already configurated nav_menu = collections.OrderedDict(self.get_apps_menu()) for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, "hidden_menu", False): continue app_config = getattr(model_admin, "app_config", None) app_label = app_config.name if app_config else model._meta.app_label model_dict = { "title": smart_text(capfirst(model._meta.verbose_name_plural)), "url": self.get_model_url(model, "changelist"), "icon": self.get_model_icon(model), "perm": self.get_model_perm(model, "view"), "order": model_admin.order, } if model_dict["url"] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]["menus"].append(model_dict) else: # first time the app is seen # Find app title if app_config: app_title = model_admin.app_config.verbose_name else: app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: mods = model.__module__.split(".") if len(mods) > 1: mod = ".".join(mods[0:-1]) if mod in sys.modules: mod = sys.modules[mod] if "verbose_name" in dir(mod): app_title = getattr(mod, "verbose_name") elif "app_title" in dir(mod): app_title = getattr(mod, "app_title") nav_menu[app_key] = {"title": app_title, "menus": [model_dict]} app_menu = nav_menu[app_key] if ("first_icon" not in app_menu or app_menu["first_icon"] == self.default_model_icon) and model_dict.get( "icon" ): app_menu["first_icon"] = model_dict["icon"] if "first_url" not in app_menu and model_dict.get("url"): app_menu["first_url"] = model_dict["url"] # after app menu is done, join it to the site menu nav_menu = nav_menu.values() site_menu.extend(nav_menu) for menu in site_menu: menu["menus"].sort(key=sortkeypicker(["order", "title"])) site_menu.sort(key=lambda x: x["title"]) return site_menu
def get_nav_menu(self): site_menu = list(self.get_site_menu() or []) # print(site_menu,'1111111') # 为空列表 had_urls = [] def get_url(menu, had_urls): if 'url' in menu: had_urls.append(menu['url']) if 'menus' in menu: for m in menu['menus']: get_url(m, had_urls) get_url({'menus': site_menu}, had_urls) nav_menu = OrderedDict() for model, model_admin in self.admin_site._registry.items(): if getattr(model_admin, 'hidden_menu', False): continue app_label = model._meta.app_label app_icon = None model_dict = { 'title': smart_text(capfirst(model._meta.verbose_name_plural)), 'url': self.get_model_url(model, "changelist"), 'icon': self.get_model_icon(model), 'perm': self.get_model_perm(model, 'view'), 'order': model_admin.order, } if model_dict['url'] in had_urls: continue app_key = "app:%s" % app_label if app_key in nav_menu: nav_menu[app_key]['menus'].append(model_dict) else: # Find app title app_title = smart_text(app_label.title()) if app_label.lower() in self.apps_label_title: app_title = self.apps_label_title[app_label.lower()] else: app_title = smart_text( apps.get_app_config(app_label).verbose_name) # find app icon if app_label.lower() in self.apps_icons: app_icon = self.apps_icons[app_label.lower()] nav_menu[app_key] = { 'title': app_title, 'menus': [model_dict], } app_menu = nav_menu[app_key] if app_icon: app_menu['first_icon'] = app_icon elif ('first_icon' not in app_menu or app_menu['first_icon'] == self.default_model_icon) and model_dict.get('icon'): app_menu['first_icon'] = model_dict['icon'] if 'first_url' not in app_menu and model_dict.get('url'): app_menu['first_url'] = model_dict['url'] for menu in nav_menu.values(): menu['menus'].sort(key=sortkeypicker(['order', 'title'])) nav_menu = list(nav_menu.values()) nav_menu.sort(key=lambda x: x['title']) # print(nav_menu,'nnnnnnnnn') # nav好像注册的是自己的 # try: # # 自定义高标清菜单 # from hall.apps import HallConfig # hall_title = HallConfig.verbose_name # from resource_.apps import ResourceConfig # resource_title = ResourceConfig.verbose_name # tmp_menus = [] # for index,item_dict in enumerate(nav_menu): # if item_dict["title"] == resource_title: # tmp_menus = item_dict['menus'] # del nav_menu[index] # for item_dict in nav_menu: # if item_dict["title"] == hall_title: # item_dict['menus'].extend(tmp_menus) # except: # pass # try: # from hallSQ.apps import HallsqConfig # hallSQ_title = HallsqConfig.verbose_name # from resourceSQ.apps import ResourcesqConfig # resourceSQ_title = ResourcesqConfig.verbose_name # tmp_menus = [] # for index, item_dict in enumerate(nav_menu): # if item_dict["title"] == resourceSQ_title: # tmp_menus = item_dict['menus'] # del nav_menu[index] # for item_dict in nav_menu: # if item_dict["title"] == hallSQ_title: # item_dict['menus'].extend(tmp_menus) # except: # pass # try: # from hall.apps import HallConfig # hall_title = HallConfig.verbose_name # from resource_.apps import ResourceConfig # resource_title = ResourceConfig.verbose_name # tmp_menus = [] # for item_dict in nav_menu: # if item_dict["title"] == resource_title: # tmp_menus = item_dict['menus'] # for item_dict in nav_menu: # if item_dict["title"] == hall_title: # item_dict['menus'].appends(tmp_menus) # print(tmp_menus,'tttttttt') # # except: # pass site_menu.extend(nav_menu) # print(site_menu) return site_menu