路径导航,面包屑

一. 正文内容时,左侧一级菜单不关闭

1.permission表加一个字段

Pid :自关联 让展示作为父权限,删该查作为子权限

 

2.改变permission_list的结构

1 for item in permissions:
2     # 构建权限列表
3     permission_list.append({
4         "url":item["permissions__url"],
5         "pk":item["permissions__pk"],
6         "pid":item["permissions__pid"],
7         "title":item["permissions__title"],
8     })

并注入session

更改中间件:数据类型变了,使用时也要变:

1 for item in permission_list:
2      reg="^%s$"%item["url"]
3      ret=re.search(reg,current_path)

全局request加一个属性

1 for item in permission_list:
2      reg="^%s$"%item["url"]
3      ret=re.search(reg,current_path)
4      if ret:
5          show_id=item["pid"] or item["pk"]
6          request.show_id=show_id
7          return None

用到了pk,添加pk

 

实现效果:

 

点击”添加缴费记录时”,左侧相对应的一级菜单也不会关闭

所有Session
登录session      User_id=当前登录用户user表的主键
权限列表        permission_list=[
{'url': '/customer/list/', 'pk': 1, 'pid': None, 'title': '客户列表'},
 {'url': '/customer/add/', 'pk': 2, 'pid': 1, 'title': '添加客户'}, 
{'url': '/customer/edit/(?P<cid>\d+)/', 'pk': 3, 'pid': 1, 'title': '编辑客户'},
 {'url': '/customer/del/(?P<cid>\d+)/', 'pk': 4, 'pid': 1, 'title': '删除客户'},
 {'url': '/payment/list/', 'pk': 5, 'pid': None, 'title': '缴费列表'}, 
{'url': '/payment/add/', 'pk': 6, 'pid': 5, 'title': '添加缴费记录'},
 {'url': '/payment/edit/(?P<pid>\d+)/', 'pk': 7, 'pid': 5, 'title': '编辑缴费记录'},
 {'url': '/payment/del/(?P<pid>\d+)/', 'pk': 8, 'pid': 5, 'title': '删除缴费记录'}
]
列名的别名:     permission_names=[
'customer_list',
 'customer_add',
 'customer_edit', 
'customer_del', 
'payment_list', 
'payment_add',
 'payment_edit',
 'payment_del'
]

菜单权限        permission_menu_dict={
'1': {
'menu_title': '信息管理',
 'menu_icon': 'fa fa-connectdevelop',
 'children': [{'title': '客户列表', 'url': '/customer/list/', 'pk': 1}]
},
 '2': {
'menu_title': '财务管理',
 'menu_icon': 'fa fa-code-fork',
 'children': [{'title': '缴费列表', 'url': '/payment/list/', 'pk': 5}]}
}

二. 路径导航:面包屑

在中间件中,request在加一个属性

 1 request.breadcrumb=([
 2     {
 3         "title": "首页",
 4         "url": "/",
 5     }
 6 ])
 7 
 8 for item in permission_list:
 9      reg="^%s$"%item["url"]
10      ret=re.search(reg,current_path)
11      if ret:
12          show_id=item["pid"] or item["pk"]
13          request.show_id=show_id
14          if item["pid"]:
15              ppermission=Permission.objects.filter(pk=item["pid"]).first()
16              request.breadcrumb.extend([
17                  {
18                      "title": ppermission.title,
19                      "url": ppermission.url,
20                  },
21                  {
22                      "title": item["title"],
23                      "url":request.path,
24                  }
25              ])
26          else:
27              request.breadcrumb.extend([
28                  {
29                      "title": item["title"],
30                      "url": item["url"],
31                  }
32              ])
33          return None

前端使用:

1 <ol class="breadcrumb no-radius no-margin" style="border-bottom: 1px solid #ddd;">
2     {% for foo in request.breadcrumb %}
3     <li ><a href="{{ foo.url }}">{{ foo.title }}</a></li>
4     {% endfor %}
5 </ol>

.权限分配页面数据结构

[{
    'id': 1,
    'url': '/customer/list/',
    'title': '客户列表',
    'name': 'web:customer',
    'menu_id': 1,
    'parent_id': None,
    'menu__title': '信息管理'
}, {
    'id': 2,
    'url': '/customer/add/',
    'title': '添加客户',
    'name': 'web:customer_add',
    'menu_id': None,
    'parent_id': 1,
    'menu__title': None
}, {
    'id': 3,
    'url': '/customer/edit/(?P<cid>\d+)/',
    'title': '编辑客户',
    'name': 'web:customer_edit',
    'menu_id': None,
    'parent_id': 1,
    'menu__title': None
}, {
    'id': 4,
    'url': '/customer/del/(?P<cid>\d+)/',
    'title': '删除客户',
    'name': 'web:customer_del',
    'menu_id': None,
    'parent_id': 1,
    'menu__title': None
}, {
    'id': 5,
    'url': '/payment/list/',
    'title': '缴费列表',
    'name': 'web:payment',
    'menu_id': 1,
    'parent_id': None,
    'menu__title': '信息管理'
}, {
    'id': 6,
    'url': '/payment/add/',
    'title': '添加缴费记录',
    'name': 'web:payment_add',
    'menu_id': None,
    'parent_id': 5,
    'menu__title': None
}, {
    'id': 7,
    'url': '/payment/edit/(?P<pid>\d+)/',
    'title': '编辑缴费记录',
    'name': 'web:payment_edit',
    'menu_id': None,
    'parent_id': 5,
    'menu__title': None
}, {
    'id': 8,
    'url': '/payment/del/(?P<pid>\d+)/',
    'title': '删除缴费记录',
    'name': 'web:payment_del',
    'menu_id': None,
    'parent_id': 5,
    'menu__title': None
}]





{
    1: {
        'id': 1,
        'url': '/customer/list/',
        'title': '客户列表',
        'name': 'web:customer',
        'menu_id': 1,
        'parent_id': None,
        'menu__title': '信息管理',
        'children': [{
            'id': 2,
            'url': '/customer/add/',
            'title': '添加客户',
            'name': 'web:customer_add',
            'menu_id': None,
            'parent_id': 1,
            'menu__title': None
        }, {
            'id': 3,
            'url': '/customer/edit/(?P<cid>\d+)/',
            'title': '编辑客户',
            'name': 'web:customer_edit',
            'menu_id': None,
            'parent_id': 1,
            'menu__title': None
        }, {
            'id': 4,
            'url': '/customer/del/(?P<cid>\d+)/',
            'title': '删除客户',
            'name': 'web:customer_del',
            'menu_id': None,
            'parent_id': 1,
            'menu__title': None
        }]
    },
    5: {
        'id': 5,
        'url': '/payment/list/',
        'title': '缴费列表',
        'name': 'web:payment',
        'menu_id': 1,
        'parent_id': None,
        'menu__title': '信息管理',
        'children': [{
            'id': 6,
            'url': '/payment/add/',
            'title': '添加缴费记录',
            'name': 'web:payment_add',
            'menu_id': None,
            'parent_id': 5,
            'menu__title': None
        }, {
            'id': 7,
            'url': '/payment/edit/(?P<pid>\d+)/',
            'title': '编辑缴费记录',
            'name': 'web:payment_edit',
            'menu_id': None,
            'parent_id': 5,
            'menu__title': None
        }, {
            'id': 8,
            'url': '/payment/del/(?P<pid>\d+)/',
            'title': '删除缴费记录',
            'name': 'web:payment_del',
            'menu_id': None,
            'parent_id': 5,
            'menu__title': None
        }]
    }
}
原文地址:https://www.cnblogs.com/shanghongyun/p/9981282.html