首页 > 编程语言 >【Python】 多层级嵌套循环

【Python】 多层级嵌套循环

时间:2023-11-23 17:44:19浏览次数:32  
标签:层级 show Python menu self list 嵌套循环 data id

1. 渲染多级菜单, 并调整数据

# 生成 菜单树状目录
class MenuTreeView(APIView):
    # 多层级 生成树状目录
    def generate_menu_tree(self, parent_menu):
        temp_menu_list = []
        sub_menus = models.Menu.objects.filter(parent=parent_menu)
        for sub_menu in sub_menus:
            _temp = {'id': sub_menu.id, 'label': sub_menu.title, 'sortNo': sub_menu.sortNo, 'url': sub_menu.url,
                     'show': 0, 'children': self.generate_menu_tree(sub_menu)}
            temp_menu_list.append(_temp)
        return temp_menu_list

    # 多层级 修改 show值
    def process_nested(self, data, menu_id_list):
        if isinstance(data, dict):  # 如果是字典
            if data['id'] in menu_id_list:
                data['show'] = 1
            if isinstance(data['children'], (dict, list)):  # 如果值是字典或列表,递归调用process_nested
                self.process_nested(data['children'], menu_id_list)
        elif isinstance(data, list):  # 如果是列表
            for item in data:
                if isinstance(item, (dict, list)):  # 如果元素是字典或列表,递归调用process_nested
                    self.process_nested(item, menu_id_list)

    # 多层级遍历 子节点中show值, 来修改父节点的show值
    def update_show(self, data):
        for item in data:
            children = item.get('children')
            if children:
                # 递归处理子节点
                self.update_show(children)
                # 判断子节点中是否存在show=1的情况
                has_show_1 = any(child.get('show') == 1 for child in children)
                if has_show_1:
                    item['show'] = 1
        return data

    def get(self, request):
        print(request.GET)
        res = []
        try:
            req_data = request.GET.dict()
            flag = req_data.get('flag')  # 获取操作方式, flag==all, 获取所有菜单, or 获取当前用户的菜单
            # 生成 所有菜单树目录
            menu_tree = self.generate_menu_tree(None)
            if flag == 'all':
                _menu_id_list = models.Menu.objects.all().values_list('id', flat=True)
                self.process_nested(menu_tree, _menu_id_list)  # 更新 show=1
            else:
                # 获取当前用户的菜单id
                _menu_id_list = []
                for i in request.user.roles.all():
                    _menu_id_list.extend(i.menu.all().values_list('id', flat=True))
                _menu_id_list = set(_menu_id_list)
                self.process_nested(menu_tree, _menu_id_list)  # 更新 show=1
                self.update_show(menu_tree)  # 更新 父级菜单 show=1
            res = menu_tree
        except:
            traceback.print_exc()
            return JsonError(msg='错误')
        return JsonResponse(res)

标签:层级,show,Python,menu,self,list,嵌套循环,data,id
From: https://www.cnblogs.com/jessecheng/p/17852132.html

相关文章

  • python批量修改文件名
    需求:有几十个文件(不超过100个),要根据文件名加序号思路:用字典将关键字对应序号,再批量改文件名,代码比较简单:importospath=input("请输入需批量更名的文件夹全路径:")units={"总裁办":"01","生产处":"02","安全处":"03"}files=os.listdir(path)forfilein......
  • 编程语言和Python语言介绍
    (一)编程语言和Python语言介绍(1)编程语言的分类(1)机器语言什么是机器语言?机器语言是计算机可以理解的语言,是直接操作硬件的语言。就是计算机可以听懂的语言。由于计算机基于电工作,电频有高低电频之分,即高电频和低电频(0和1)计算机可以理解的就是二进制的指令(0/1),所有机器语......
  • python-task3:Data Types and Operators
    常见数据类型整数Integer(int)浮点数Float(python中默认为双精度浮点型)布尔值Boolean(bool)类型Type(“类型”也是种类型)其他数据类型字符串String(str)、列表List、元组Tuple、集合Set、字典Dictionary(dict,或者可以叫它映射map)、复数ComplexNumber(complex)、函数Func......
  • python-task4:Variables and Functions
    变量Variables以字母或下划线(_)开头(不可以以数字开头)以字母、数字、下划线组成大小写敏感(A与a不一样)需要避免使用保留字命名,以下代码可查询保留字importkeywordkeyword.kwlist对于变量,旧的值会覆盖新的值,而且python支持多变量赋值a=b=c=2print(f"a={a},b={b},c={c}"......
  • Python爬虫:如何抓取拉勾网职位信息
    随着互联网的发展,越来越多的求职者开始使用网络平台寻找工作机会。而对于企业来说,发布招聘信息也成为了一种重要的招聘方式。因此,抓取各大招聘网站上的职位信息成为了一项非常有用的工作。本文将介绍如何使用Python爬虫抓取拉勾网上的职位信息。1.确定需求首先,我们需要确定要抓取哪......
  • Python爬虫与人工智能:如何让机器学会自动抓取网络数据
    随着互联网的发展,网络数据变得越来越丰富。许多公司和组织需要从网络上获取大量的数据进行分析和研究,这时候就需要一种有效的方式来自动化抓取网络数据。Python爬虫和人工智能是两个强大的技术,结合起来可以让机器学会自动抓取网络数据。Python爬虫是指使用Python语言编写程序,模拟浏......
  • Python构思如何采集天气数据
    天气数据对于许多应用领域都非常重要,如旅游规划、农业生产、气象预测等。使用Python爬虫可以方便地从各种天气网站上获取实时的天气数据。本文将介绍如何使用Python爬虫实战来爬取天气数据,帮助您在自己的项目中快速获取天气信息。1.确定目标网站和URL首先,我们需要确定一个可靠的天......
  • 深入理解Python爬虫中的HTTP请求与响应过程
    在Python爬虫开发中,了解HTTP请求与响应的过程是非常重要的。HTTP(HypertextTransferProtocol)是一种用于传输超文本的应用层协议,通过HTTP协议,我们可以在网络上获取各种资源。本文将深入探讨Python爬虫中的HTTP请求与响应过程,帮助您更好地理解和应用Python爬虫技术。1.了解HTTP协议H......
  • python如何多版本共存
    1.先正常安装多个python版本,比如我电脑里面是安装的3.10以及3.122.安装的时候建议不要选择系统盘,可以用两个目录安装,例如:d:\py310\...d:\py312\...3.安装好了之后,可以通过命令提示符win+r输入wherepython可以查看到全部python的版本。4.分别打开python的安装目录,找......
  • Python 使用XlsxWriter操作Excel
    在数据处理和报告生成的领域中,Excel文件一直是广泛使用的标准格式。为了让Python开发者能够轻松创建和修改Excel文件,XlsxWriter库应运而生。XlsxWriter是一个功能强大的Python模块,专门用于生成MicrosoftExcel2007及以上版本(.xlsx格式)的电子表格文件。本文将对XlsxWri......