django 权限设置 左侧菜单点击显示,面包屑

1.左侧菜单点击显示 就是在点击的时候保留点击的功能

方法。

1.加入新的字段,pid来判断

1 class Permission(models.Model):
2     """
3     权限表
4     """
5     title = models.CharField(max_length=32, verbose_name='标题')
6     url = models.CharField(max_length=32, verbose_name='权限')
7     menu=models.ForeignKey("Menu",on_delete=models.CASCADE,null=True)
8     name=models.CharField(max_length=32,verbose_name='url别名',default="")
9     pid=models.ForeignKey('self',on_delete=models.CASCADE,null=True,verbose_name="父权限")
models

2.写入数据

3.在中间件添加

 1         request.breadcrumb =[
 2             {
 3                 "title" :"首页",
 4                 "url" :"/"
 5             },
 6         ]
 7         for item in permission_list:
 8             reg ="^%s$" %item["url"]
 9             ret =re.search(reg ,current_path)
10             if ret:
11                 show_id =item["pid"] or item["id"]
12                 request.show_id =show_id
中间件

根据pid和pk判断,通过request。show-id传递到 过滤器

4.在过滤器中通过是否有

 1 @register.inclusion_tag("rbac/menu.html")
 2 def get_menu_styles(request):
 3     permission_menu_dict = request.session.get("permission_menu_dict")
 4     print("permission_menu_dict", permission_menu_dict)
 5 
 6     for val in permission_menu_dict.values():
 7         for item in val["children"]:
 8             val["class"] = "hide"
 9             # /payment/
10             # /payment/edit/4/
11             # ret=re.search("^{}$".format(item["url"]),request.path)
12             if request.show_id == item["pk"]:
13                 val["class"] = ""
14 
15     return {"permission_menu_dict": permission_menu_dict}
过滤器

 

面包屑

1.在中间件中找到渲染在页面的的字典

 1         request.breadcrumb =[
 2             {
 3                 "title" :"首页",
 4                 "url" :"/"
 5             },
 6         ]
 7         for item in permission_list:
 8             reg ="^%s$" %item["url"]
 9             ret =re.search(reg ,current_path)
10             if ret:
11                 show_id =item["pid"] or item["id"]
12                 request.show_id =show_id
13 
14                 # 确定面包屑列表
15                 if item["pid"]:
16                     ppermission =Permission.objects.filter(pk=item["pid"]).first()
17                     #加入两个字典用extend
18                     request.breadcrumb.extend(
19                         [{
20                             "title" :ppermission.title,
21                             "url" :ppermission.url,
22                         } ,{
23                             "title": item["title"],
24                             "url": request.path
25                         }  ,# 子权限字典
26                         ]
27 
28                     )
29                 else:
30                     request.breadcrumb.append(
31                         {
32                             "title" :item["title"],
33                             "url" :item["url"]
34                         }
35                     )
36                 return None
中间件

 

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

 

posted @ 2018-11-18 22:27  逆欢  阅读(396)  评论(0编辑  收藏  举报