zoukankan      html  css  js  c++  java
  • adminLTE的自动化菜单

    一.
      model
      
     1 from django.db import models
     2 
     3 
     4 # Create your models here.
     5 class MenuInfo(models.Model):
     6     parent = models.ForeignKey('MenuInfo', blank=True, null=True)
     7     name = models.CharField('菜单名称', max_length=15)
     8     menu_icon = models.ForeignKey('IconInfo', verbose_name='图标')
     9     url = models.CharField('网址', max_length=100, blank=True, null=True)
    10     show = models.BooleanField('是否显示', default=False)
    11     priority = models.IntegerField(verbose_name=u'显示优先级', null=True, blank=True, default=-1)
    12 
    13     class Meta:
    14         db_table = 'MenuInfo'
    15 
    16 
    17 class IconInfo(models.Model):
    18     DisplayName = models.CharField(max_length=100)
    19     ClassName = models.CharField(max_length=100)
    20     SourceType = models.CharField(max_length=100)
    21     CreateTime = models.DateTimeField(auto_created=True)
    22 
    23     class Meta:
    24         db_table = 'IconInfo'
    model的代码

    二.

      模板中间件

      1.setting的设置

     1 TEMPLATES = [
     2     {
     3         'BACKEND': 'django.template.backends.django.DjangoTemplates',
     4         'DIRS': [os.path.join(BASE_DIR, 'templates')]
     5         ,
     6         'APP_DIRS': True,
     7         'OPTIONS': {
     8             'context_processors': [
     9                 'django.template.context_processors.debug',
    10                 'django.template.context_processors.request',
    11                 'django.contrib.auth.context_processors.auth',
    12                 'django.contrib.messages.context_processors.messages',
    13                 'adminLTE.context_processors.make_menus_processor',
    14             ],
    15             'builtins': [                                     # Add this section
    16                 "debugtools.templatetags.debugtools_tags",   # Add this line
    17             ],
    18         },
    19     },
    20 ]
    setting的设置

      2.中间件的代码
      2.1设置了一个全局变量,这样方便设置菜单的active的选中状态

     1 from django.utils.html import format_html
     2 from menuInfo.models import MenuInfo
     3 
     4 menu_active = ''
     5 
     6 def make_menus_html(menus, parent_id=None, current_parent_id=None, active=None):
     7     """
     8     menus = Menus.objects.all()
     9     :param menus: 寻找的对象,传一个queryset对象
    10     :param parent_id: 父级菜单ID
    11     :param current_parent_id: 当前父级菜单ID
    12     :param active: 激活的菜单名
    13     :return:
    14     """
    15     make_html = ""
    16     for menu in menus:
    17         child_menu_flag = "treeview"
    18         menu_right_flag = '<span class="pull-right-container"><i class="fa fa-angle-left pull-right"></i></span>'
    19         child_menu = '<li class="{active}"><a href="{menu_url}"><i class="fa fa-circle-o"></i> {menu_name}</a></li>'
    20         child_menu_html = '<ul class="treeview-menu">{make_child_menu_html}</ul>'
    21         master_menu_html = """
    22         <li class="{child_menu_flag} {active}">
    23             <a href="{menu_url}"><i class="fa {menu_icon}"></i> <span>{menu_name}</span>{menu_right_flag}</a>
    24             <ul class="treeview-menu">
    25             {children_menu_html}
    26             </ul>
    27         </li>"""
    28         children_menu_html = """
    29         <li class="treeview">
    30             <a href="{menu_url}"><i class="fa fa-circle-o"></i> <span>{menu_name}</span>{menu_right_flag}</a>
    31             {child_menu_html}
    32         </li>"""
    33         parent = menu.parent  # 获取当前菜单的父级菜单
    34         if current_parent_id == menu.id or (not parent and current_parent_id):
    35             continue  # 如果当前父级菜单ID是自己或没有父级菜单且有当前父级ID则跳过本次循环
    36         if not parent and current_parent_id is None:  # 如果没有父级菜单且当前父级ID是None
    37             make_children_menu_html = make_menus_html(menus, parent_id=parent_id, current_parent_id=menu.id)
    38             if not make_children_menu_html:
    39                 menu_right_flag = ''
    40             menu_icon = menu.menu_icon.ClassName
    41             if hasattr(menu, 'icon_name'):
    42                 menu_icon = menu.icon_name
    43             active = menu_active.split('/')[1]
    44             active = '/%s/' % active
    45             if menu.url == active:
    46                 active_menu = 'active'
    47             else:
    48                 active_menu = ''
    49             make_master_menu_html = master_menu_html.format(child_menu_flag=child_menu_flag,
    50                                                             active=active_menu,
    51                                                             menu_url=menu.url,
    52                                                             menu_icon=menu_icon,
    53                                                             menu_name=menu.name,
    54                                                             menu_right_flag=menu_right_flag,
    55                                                             children_menu_html=make_children_menu_html)
    56             make_html += make_master_menu_html
    57         elif parent and current_parent_id == parent.id:  # 如果有父级且当前父级ID是自己的父级ID4
    58             make_child_menu_html = make_menus_html(menus, parent_id=current_parent_id, current_parent_id=menu.id)
    59             if make_child_menu_html:
    60                 child_menu_html = child_menu_html.format(make_child_menu_html=make_child_menu_html)
    61                 children_menu_html = children_menu_html.format(menu_url=menu.url,
    62                                                                menu_name=menu.name,
    63                                                                menu_right_flag=menu_right_flag,
    64                                                                child_menu_html=child_menu_html)
    65             else:
    66                 if menu.url == menu_active:
    67                     active_menu = 'active'
    68                 else:
    69                     active_menu = ''
    70                 children_menu_html = child_menu.format(menu_url=menu.url, menu_name=menu.name, active=active_menu)
    71             make_html += children_menu_html
    72         else:
    73             continue
    74     return make_html
    75 
    76 
    77 def make_menus_processor(request):
    78     menus_obj = MenuInfo.objects.filter(show=0)
    79     global menu_active
    80     menu_active = request.path
    81     menus = make_menus_html(menus=menus_obj, active=menu_active)
    82     return {'menus': format_html(menus)}
    模板中间件代码
  • 相关阅读:
    asp.net中3个常用的功能,直接上代码
    看WEB 2.0实战书中的部分技术资料 引用 很随笔,很杂乱
    Building a Web 2.0 Portal with ASP.NET 3.5(DropThings实例教学)
    如何防治猪流感!猪流感!?会像SARS那样爆发吗?我们能作的就是预防。
    招聘!北京 DNN程序员 5K7K
    国外的机器人爱好者使用C#等研发的一种家庭灭火机器人
    OLAP与OLTP的区别 及 什么是数据仓库
    动态绑定数据源的ReportViewer终于搞定了
    牛奶再次出事?!算了,我还是自己榨豆浆吧。中国人喝豆浆!
    c#遍历HashTable
  • 原文地址:https://www.cnblogs.com/fcmyoo/p/6251716.html
Copyright © 2011-2022 走看看