zoukankan      html  css  js  c++  java
  • Django-权限信息自定义标签

    自定义权限标签:

    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')
        }
    })
    });
  • 相关阅读:
    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
    Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
    PAT 1152 Google Recruitment
    PAT 1092 To Buy or Not to Buy
    PAT 1081 Rational Sum
    PAT 1084 Broken Keyboard
    PAT 1077 Kuchiguse
    PAT 1073 Scientific Notation
  • 原文地址:https://www.cnblogs.com/52-qq/p/8669816.html
Copyright © 2011-2022 走看看