面包屑
制定面包屑
如果用到权限校验,要把面包屑的逻辑,构建面包屑列表,写在中间件中
import re from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse,redirect from rbac.models import Permission class PermissionMiddleWare(MiddlewareMixin): def process_request(self,request): print("permission_list",request.session.get("permission_list")) current_path = request.path # 设置白名单放行 for reg in ["/login/","/admin/*", "/rbac/permissions_tree/"]: ret=re.search(reg,current_path) if ret: return None # /customers/edit/1 # 校验是否登录 user_id=request.session.get("user_id") if not user_id: return redirect("/login/") # 校验权限 permission_list=request.session.get("permission_list") # 路径导航列表 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() request.breadcrumb.extend([ { "url":ppermission.url, "title":ppermission.title, }, # 父权限字典 { "title": item["title"], "url": request.path, }, # 子权限字典 ]) else: request.breadcrumb.append( { "title": item["title"], "url": item["url"], } ) return None print(request.breadcrumb_list) return HttpResponse("无访问权限!")
(1)如果不自定义标签
request.breadcrumb 是全局的,直接可以在模板文件中使用,在此次实例中,将面包屑的的位置放在继承的模版中(lay.html)
{# {% for item in request.breadcrumb %}#}
{##}
{# <li><a href="{{ item.url }}">{{ item.title }}</a></li>#}
{# {% endfor %}#}
(2) 如果自定义标签
templatetags文件夹
rbac.py文件
#######
@register.inclusion_tag('rbac/breadcrumb.html')
def breadcrumb(request):
return {'breadcrumb_list': request.breadcrumb}
bredcrumb.html文件中
<ol class="breadcrumb no-radius no-margin" style="border-bottom: 1px solid #ddd;">
{% for li in breadcrumb_list %}
{% if forloop.last %}
<li>{{ li.title }}</li>
{% else %}
<li><a href="{{ li.url }}">{{ li.title }}</a></li>
{% endif %}
{% endfor %}
</ol>
lay.html文件中
{% load rbac %}
{% breadcrumb request %}
最终的效果


浙公网安备 33010602011771号