路径导航 :
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>