Pid :自關聯 讓展現做爲父權限,刪該查做爲子權限前端
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 })
並注入sessionweb
更改中間件:數據類型變了,使用時也要變: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,添加pkapp
實現效果:url
點擊」添加繳費記錄時」,左側相對應的一級菜單也不會關閉spa
全部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在加一個屬性 3d
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
前端使用:code
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 }] } }