zoukankan      html  css  js  c++  java
  • 二级菜单

    1.修改表结构

     1 class Menu(models.Model):
     2         title = models.CharField(max_length=32, verbose_name='菜单')
     3         icon = models.CharField(max_length=32, verbose_name='图标', null=True, blank=True)
     4 
     5     class Permission(models.Model):
     6         """
     7         权限表
     8         """
     9         title = models.CharField(max_length=32, verbose_name='标题')
    10         url = models.CharField(max_length=32, verbose_name='权限')
    11         menu=models.ForeignKey("Menu",on_delete=models.CASCADE,null=True)

    2.重新将二级菜单信息主人session中

    from rbac.models import Role
    
    
    def initial_sesson(user,request):
        """
        功能:将当前登录人的所有权限录入session中
        :param user: 当前登录人
        """
        # 查询当前登录人的所有权限列表
        # 查看当前登录人的所有角色
        # ret=Role.objects.filter(user=user)
        permissions = Role.objects.filter(user=user).values("permissions__url",
                                                            "permissions__title",
                                                            "permissions__menu__pk",
                                                            "permissions__menu__title",
                                                            "permissions__menu__icon"
                                                            ).distinct()
        print(permissions)
    
        permission_list = []
        permission_menu_dict = {}
    
        for item in permissions:
            # 构建权限列表
            permission_list.append(item["permissions__url"])
    
            # 构建菜单权限列表
            if item["permissions__menu__pk"]:
                if not item["permissions__menu__pk"] in permission_menu_dict:
                    permission_menu_dict = {
                        "title":item["permissions__menu__title"],
                        "icon":item["permissions__menu__icon"],
                        "children":[
                            {
                                "title":item["permissions__title"],
                                "url":item["permissions__url"]
                            }
                        ]
                    }
            else:
                permission_menu_dict["children"].append({
                    "title":item["permissions__title"],
                    "url":item["permissions__url"]
                })
    
    
        # 将当前登录人的权限列表注入session中
        request.session["permission_list"] = permission_list
        # 将当前登录人的菜单权限列表注入session中
        request.session["permission_menu_dict"] = permission_menu_dict

    3.获取二级菜单信息

    from django.utils.safestring import mark_safe
    from django.template import Library
    import re
    register =Library()
    
    @register.inclusion_tag("rbac/menu.html")
    def get_menu_styles(request):
        permission_menu_dict = request.session.get("permission_menu_dict")
        print(permission_menu_dict)
        return {"permission_menu_dict":permission_menu_dict}

    4.渲染界面

    <div class="multi-menu">
    
        {% for item in permission_menu_dict.values %}
    
           <div class="item">
            <div class="title"><i class="{{ item.menu_icon }}"></i>{{ item.menu_title }}</div>
            <div class="body">
                  {% for foo in item.children %}
                      <a href="{{ foo.url }}">{{ foo.title }}</a>
                  {% endfor %}
    
            </div>
           </div>
        {% endfor %}
    
    </div>
  • 相关阅读:
    微信小程序支付【前端】
    CSS主题切换
    利用Proxy写了个存储管理
    前端存储cookie操作
    canvas电子签名和播放划线
    【原创】[Ext.ux.UploadDialog] 控件使用说明及在Ext 3.x下问题解决
    【原创】分享一组VC++底层图像处理函数
    【转发】SQL Server数据库被质疑解决方案
    SVN 解决update失败出现乱码提示或工作副本已经锁定
    Qt 外部子模块的3种使用方法,以QtXlsx为例
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9966276.html
Copyright © 2011-2022 走看看