基于django前端页面动态菜单

1、settings中定义基于中间件变量的字典

UNICOM_MENU = {
    'leader': [ 
        {'text': '用户管理', 'url': '/xx/xx/'},
        {'text': '订单管理', 'url': '/xx/xx/'},
        {'text': '工单管理', 'url': '/xx/xx/'},
    ],
    'user': [
        {'text': '用户管理', 'url': '/xx/xx/'},
        {'text': '订单管理', 'url': '/xx/xx/'},
    ]
}

 

1.1中间件
 1 from django.utils.deprecation import MiddlewareMixin
 2 from django.shortcuts import redirect
 3 class AuthMiddleware(MiddlewareMixin):
 4     def process_request(self, request):
 5         # 0.无需登录的地址,放行
 6         if request.path_info == "/login/":
 7             return
 8 
 9         # 1.获取用户session信息
10         # {"id": admin_object.id, 'username': admin_object.username}
11         user_info = request.session.get("user_info")
12 
13         # 2.有值,表示已登录,则继续
14         if user_info:
15             request.unicom_id = user_info['id']
16             request.unicom_username = user_info['username']
17             request.unicom_role = user_info['role']
18             return
19 
20         # 3.无值=None
21         return redirect('/login/')

 


2、已注册app中创建templatetags目录
  • 创建一个文件(任意命名)

  • 编写如下代码

  • from django.template import Library
    from django.conf import settings
    
    register = Library()
    
    
    @register.inclusion_tag('menu.html')
    def unicom_menu(request):
        role = request.unicom_role
        menu_list = settings.UNICOM_MENU[role]
        return {'menu_list': menu_list}

     

3、templates中创建menu.html并编写如下内容

{% for menu in menu_list %}
    <li><a href="{{ menu.url }}">{{ menu.text }}</a></li>
{% endfor %}

 


4、前段页面调用
{% load menu %}

{% unicom_menu request %}

 

posted @ 2023-05-24 12:14  壮九  阅读(91)  评论(0)    收藏  举报