自定义权限标签:
import re
from django.template import Library
from django.conf import settings
register = Library()
@register.inclusion_tag("rbac/xxxxx.html")
def menu_html(request):
"""
去Session中获取菜单相关信息,匹配当前URL,生成菜单
:param request:
:return:
"""
menu_list = request.session[settings.PERMISSION_MENU_KEY]
current_url = request.path_info
menu_dict = {}
for item in menu_list:
if not item['menu_gp_id']:
menu_dict[item['id']] = item
for item in menu_list:
regex = "^{0}$".format(item['url'])
if re.match(regex,current_url):
menu_gp_id = item['menu_gp_id']
if menu_gp_id:
menu_dict[menu_gp_id]['active'] = True
else:
menu_dict[item['id']]['active'] = True
result = {}
for item in menu_dict.values():
active = item.get('active')
menu_id = item['menu_id']
if menu_id in result:
result[menu_id]['children'].append({ 'title': item['title'], 'url': item['url'],'active':active})
if active:
result[menu_id]['active'] = True
else:
result[menu_id] = {
'menu_id':item['menu_id'],
'menu_title':item['menu_title'],
'active':active,
'children':[
{ 'title': item['title'], 'url': item['url'],'active':active}
]
}
return {'menu_dict':result}
rbac/xxxx.html
{% for k,item in menu_dict.items %}
<div class="item">
<div class="item-title">{{ item.menu_title }}</div>
{% if item.active %}
<div class="item-permission">
{% else %}
<div class="item-permission hide">
{% endif %}
{% for v in item.children %}
{% if v.active %}
<a href="{{ v.url }}" class="active">{{ v.title }}</a>
{% else %}
<a href="{{ v.url }}">{{ v.title }}</a>
{% endif %}
{% endfor %}
</div>
</div>
{% endfor %}
############样式相关
# css
.item-permission{
padding: 3px 10px;
}
.item-permission a{
display: block;
}
.item-permission a.active{
color: red;
}
.hide{
display: none;
}
# js
$(function () {
$('.item .item-title').click(function () {
if($(this).next().hasClass('hide')){
$(this).next().removeClass('hide')
}else{
$(this).next().addClass('hide')
}
})
});