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

时间:2023-03-09 05:15:12
django 权限设置 左侧菜单点击显示,面包屑

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

方法。

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

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

models

2.写入数据

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

3.在中间件添加

         request.breadcrumb =[
{
"title" :"首页",
"url" :"/"
},
]
for item in permission_list:
reg ="^%s$" %item["url"]
ret =re.search(reg ,current_path)
if ret:
show_id =item["pid"] or item["id"]
request.show_id =show_id

中间件

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

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

 @register.inclusion_tag("rbac/menu.html")
def get_menu_styles(request):
permission_menu_dict = request.session.get("permission_menu_dict")
print("permission_menu_dict", permission_menu_dict) for val in permission_menu_dict.values():
for item in val["children"]:
val["class"] = "hide"
# /payment/
# /payment/edit/4/
# ret=re.search("^{}$".format(item["url"]),request.path)
if request.show_id == item["pk"]:
val["class"] = "" return {"permission_menu_dict": permission_menu_dict}

过滤器

面包屑

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

         request.breadcrumb =[
{
"title" :"首页",
"url" :"/"
},
]
for item in permission_list:
reg ="^%s$" %item["url"]
ret =re.search(reg ,current_path)
if ret:
show_id =item["pid"] or item["id"]
request.show_id =show_id # 确定面包屑列表
if item["pid"]:
ppermission =Permission.objects.filter(pk=item["pid"]).first()
#加入两个字典用extend
request.breadcrumb.extend(
[{
"title" :ppermission.title,
"url" :ppermission.url,
} ,{
"title": item["title"],
"url": request.path
} ,# 子权限字典
] )
else:
request.breadcrumb.append(
{
"title" :item["title"],
"url" :item["url"]
}
)
return None

中间件

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

layout中的渲染表签