Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
    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