day71 菜单的排序 点击被选中

本文介绍如何在Django项目中通过设置菜单权重实现菜单项的排序,并使用正则表达式匹配URL来确定菜单项的激活状态。具体包括自定义模板标签,利用OrderedDict和lambda函数对菜单字典进行排序,以及在菜单项被点击时添加'active'类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜单的排序:(给菜单设置权重,权重高的让他显示在上面)

 

from django import template
from django.conf import settings
from collections import OrderedDict
import re

register = template.Library()


@register.inclusion_tag('menu.html')
def menu(request):
    menu_dict = request.session[settings.MENU_SESSION_KEY]

    order_dict=OrderedDict()
    ret=sorted(menu_dict,key=lambda x:menu_dict[x]['weight'],reverse=True)

    for i in ret:
        order_dict[i] = menu_dict[i]

    for r in order_dict.values():
        r['class']='hide'
        for i in r['children']:
            if re.match(r'^{}$'.format(i['url']),request.path_info):
                i['class'] = 'active'
                r['class']= ''

    return {'menu_list': order_dict.values()}

menu.html文件

<div class="multi-menu">

    {% for menu in menu_list %}
        <div class="item">
            <div class="title"><i class="fa {{ menu.icon }}"></i> {{ menu.title }}</div>
            <div class="body">
                {% for child in menu.children %}
                    <a href="{{ child.url }}""> {{ child.title }} </a>
                {% endfor %}
            </div>
        </div>
    {% endfor %}
</div>
menu.html标签

点击后被选中

 

 自定义标签.rbac.py中 :

from django import template
from django.conf import settings
from collections import OrderedDict
import re

register = template.Library()


@register.inclusion_tag('menu.html')
def menu(request):
    menu_dict = request.session[settings.MENU_SESSION_KEY]

    order_dict=OrderedDict()
    ret=sorted(menu_dict,key=lambda x:menu_dict[x]['weight'],reverse=True)

    for i in ret:
        order_dict[i] = menu_dict[i]

    for r in order_dict.values():

        for i in r['children']:
            if re.match(r'^{}$'.format(i['url']),request.path_info):
                i['class'] = 'active'


    return {'menu_list': order_dict.values()}

  menu.html文件

{#<div class="static-menu">#}

{#{% for menu in menu_list %}#}
{#    <a href="{{ menu.url }}"  class="{{ menu.class }}">#}
{#        <span class="icon-wrap"><i class="fa {{ menu.icon }}"></i></span> {{ menu.title }}</a>#}
{#{% endfor %}#}
{#</div>#}


<div class="multi-menu">

    {% for menu in menu_list %}
        <div class="item">
            <div class="title"><i class="fa {{ menu.icon }}"></i> {{ menu.title }}</div>
            <div class="body">
                {% for child in menu.children %}
                    <a href="{{ child.url }}" class="{{ child.class }}"> {{ child.title }} </a>
                {% endfor %}
            </div>
        </div>
    {% endfor %}
</div>

  

转载于:https://www.cnblogs.com/zty1304368100/p/10574123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值