路徑導航 :
1.怎樣設置需要登錄但又不需要驗證權限的路徑 :
在settings中定義一個列表,列表中以正則的方式放入需要登錄但無需驗證的權限的項.在中間件中進行循環訪問,如有符合的項,立即return即可,但要注意中間件中定義的其它必須項,可設置為None.
request.current_menu_id = None request.breadcrumb_list = [{'title': '首頁', 'url': '/index/'}] # 登陸后不需要權限 for i in settings.NO_PERMISSION_LIST: if re.match(i, url): return
2.設置路徑導航的思路 :
在中間件中定義一個列表存放訪問的路徑,並在前端動態渲染出來.
知識點 : 動態生成頁面 : 自定義標簽 inclusion_tag;將存在session中的menu以字典的形式存放,方便在中間件中取出二級菜單的路徑和普通權限的路徑.
for permission in permission_dict.values(): if re.match(r'^{}$'.format(permission['url']), url): pid = permission.get('pid') id = permission.get('id') if pid: #存在pid,是普通權限 request.current_menu_id = pid request.breadcrumb_list.append( #添加二級菜單路徑 {'title': permission_dict[str(pid)]['title'], 'url': permission_dict[str(pid)]['url']}) request.breadcrumb_list.append({'title': permission['title'], 'url': permission['url']}) #添加普通權限路徑 else: #pid不存在,表示訪問的是二級菜單 request.current_menu_id = id request.breadcrumb_list.append({'title': permission['title'], 'url': permission['url']}) #添加二級菜單路徑 return
3.通過自定義標簽動態渲染導航欄 :
@register.inclusion_tag('breadcrumb.html') #inclusion中的內容 : 將字典傳入breadcrumb.html,注意傳入參數 def breadcrumb(request): return {'breadcrumb_list': request.breadcrumb_list}
4.前端通過if判斷設置導航欄結尾是否能被重復選擇
<div> <ol class="breadcrumb no-radius no-margin" style="border-bottom: 1px solid #ddd;"> {% for breadcrumb in breadcrumb_list %} {% if forloop.last %} <li class="active">{{ breadcrumb.title }}</li> {% else %} <li><a href="{{ breadcrumb.url }}">{{ breadcrumb.title }}</a></li> {% endif %} {% endfor %} </ol> </div>