权限组件(4):给动态菜单增加面包屑导航
生活随笔
收集整理的這篇文章主要介紹了
权限组件(4):给动态菜单增加面包屑导航
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
效果圖:
?
一、在初始化權限的時候增加二級菜單的標題和url
這么做是為了在中間件中把二級菜單和具體權限的標題、url都儲存起來
rbac/service/init_permission.py
二、中間件處理
rbac/middlewares/rbac.py
import refrom django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse from permission_learn import settingsclass RbacMiddleware(MiddlewareMixin):def process_request(self, request):white_list = settings.WHITE_LISTcurrent_path = request.pathfor valid_url in white_list:if re.match(valid_url, current_path):return Nonepermission_list = request.session.get(settings.PERMISSION_SESSION_KEY)if not permission_list:return HttpResponse('請先登錄 ')has_permission = Falseurl_record = [{'title': '首頁', 'url': '#'}]for item in permission_list:regex = '^%s$' % item['url']if re.match(regex, current_path):has_permission = Truerequest.current_selected_permission = item['pid'] or item['id']if not item['pid']: # 選中的是二級菜單,這時候是沒有pid的,所以就沒有p_title url_record.extend([{'title': item['title'], 'url': item['url'], 'class': 'active'}])else: # 選中的是具體權限,有pid和p_title。給具體權限加上class。 url_record.extend([{'title': item['p_title'], 'url': item['p_url']},{'title': item['title'], 'url': item['url'], 'class': 'active'},])request.breadcrumb = url_record # 通過request,把儲存信息傳給用戶breakif not has_permission:return HttpResponse('未獲取權限')?注意:
- 選中的是二級菜單時,只要給列表加上二級菜單就標題和url就可以,這時候是沒有pid和p_title的。直接給二級菜單加上class就可以。
- 選中具體權限時,它是有pid的,要給列表加上二級菜單的標題和url。給具體權限加上class
class在頁面會顯示灰色效果。
?
三、模板處理
rbac/templatestag/rbac.py
import re from collections import OrderedDictfrom django.conf import settings from django.template import Libraryregister = Library()@register.inclusion_tag('rbac/breadcrumb.html') def breadcrumb(request):return {'record_list': request.breadcrumb}?
rbac/templates/rbac/breadcrumb.html
<div><ol class="breadcrumb no-radius no-margin" style="border-bottom:1px solid #ddd">{% for item in record_list %}{% if item.class %}<li class="{{ item.class }}">{{ item.title }}</li>{% else %}<li><a href="{{ item.url }}">{{ item.title }}</a></li>{% endif %}{% endfor %}</ol> </div>如果有class,就說明是被用戶選中的二級菜單或url,反之,就給一個可以點擊的a標簽
?
在layout.html頁面引入面包屑導航
<div class="right-body">{% breadcrumb request %} <!-- + -->{% block content %} {% endblock %}</div>?
?
轉載于:https://www.cnblogs.com/lshedward/p/10497669.html
總結
以上是生活随笔為你收集整理的权限组件(4):给动态菜单增加面包屑导航的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记之Fluent Python
- 下一篇: 51单片机——My-Clock项目