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>
  • 相关阅读:
    LeetCode 1245. Tree Diameter
    LeetCode 1152. Analyze User Website Visit Pattern
    LeetCode 1223. Dice Roll Simulation
    LeetCode 912. Sort an Array
    LeetCode 993. Cousins in Binary Tree
    LeetCode 1047. Remove All Adjacent Duplicates In String
    LeetCode 390. Elimination Game
    LeetCode 1209. Remove All Adjacent Duplicates in String II
    LeetCode 797. All Paths From Source to Target
    LeetCode 1029. Two City Scheduling
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9966276.html
Copyright © 2011-2022 走看看