Django之导航和细化到按钮级别根据权限显示
动态显示导航,当前页面的路径
显示导航的代码段
将显示的导航内容放置到request中
在模板中使用
此时点击二级菜单没有问题,但是点击三级菜单的时候,并没有二级菜单。
当有parent_id的时候,可以通过权限列表找到对应的二级菜单,并添加到breadcrum_list列表中,但是此时的权限列表(permisssions_list)是个列表,并且没有id这个字段,当然可以,把id这个字段添加进去,进而进行循环进行判断,显然这种存在效率问题。
解决方法:可以将权限列表,改为权限字典,字典的key是对应的菜单的id,每次查找只需要拿到对应的id就可以取出对应的url和title。这样就避免了循环。
修改permissions_list ---> permissions_dict
得到的数据结构:
修改完之后打印下结构,发现报错:
寻找问题:
生成的字典是交给了session中。
在中间件中从session中获取permission_dict
OK,原来的permissions_list 就变成了permissions_dict
将获取的菜单信息,添加到breadcrumb_list 中。
注意: 由于权限字典的key是整型,但是经过session处理之后,key变成了字符串类型,但是parent_id还是数字类型,所以在字典取值的时候,需把parent_id转成字符串类型。
进一步完善代码:
将以上代码放入到inclusion_tag中,将以上代码放到新建的breadcrumb.html中
模板中使用
按钮级别的显示。
比如:陈没有添加功能的权限。所以在显示页面上就不应该显示添加功能的这个按钮
1, 修改表结构,并且给每个url起个别名
2, 去admin中添加name
3,初始化权限中加入name字段
4,将permissions_name设置成唯一的目的是
将权限字典的key设置为name。引起了之后校验的问题
通过pname获取父标签。
前端中使用
完善代码:
可以将前端的逻辑写到filter中
前端中使用
OK完成!