首页 > 其他 > 详细

adminLTE的自动化菜单

时间:2017-01-05 13:05:08      阅读:597      评论:0      收藏:0      [点我收藏+]
一.
  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)}
模板中间件代码

 

 

adminLTE的自动化菜单

原文:http://www.cnblogs.com/fcmyoo/p/6251716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!