一.
  model
  

 from django.db import models

 # Create your models here.
class MenuInfo(models.Model):
parent = models.ForeignKey('MenuInfo', blank=True, null=True)
name = models.CharField('菜单名称', max_length=15)
menu_icon = models.ForeignKey('IconInfo', verbose_name='图标')
url = models.CharField('网址', max_length=100, blank=True, null=True)
show = models.BooleanField('是否显示', default=False)
priority = models.IntegerField(verbose_name=u'显示优先级', null=True, blank=True, default=-1) class Meta:
db_table = 'MenuInfo' class IconInfo(models.Model):
DisplayName = models.CharField(max_length=100)
ClassName = models.CharField(max_length=100)
SourceType = models.CharField(max_length=100)
CreateTime = models.DateTimeField(auto_created=True) class Meta:
db_table = 'IconInfo'

model的代码

二.

  模板中间件

  1.setting的设置

 TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'adminLTE.context_processors.make_menus_processor',
],
'builtins': [ # Add this section
"debugtools.templatetags.debugtools_tags", # Add this line
],
},
},
]

setting的设置

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

 from django.utils.html import format_html
from menuInfo.models import MenuInfo menu_active = '' def make_menus_html(menus, parent_id=None, current_parent_id=None, active=None):
"""
menus = Menus.objects.all()
:param menus: 寻找的对象,传一个queryset对象
:param parent_id: 父级菜单ID
:param current_parent_id: 当前父级菜单ID
:param active: 激活的菜单名
:return:
"""
make_html = ""
for menu in menus:
child_menu_flag = "treeview"
menu_right_flag = '<span class="pull-right-container"><i class="fa fa-angle-left pull-right"></i></span>'
child_menu = '<li class="{active}"><a href="{menu_url}"><i class="fa fa-circle-o"></i> {menu_name}</a></li>'
child_menu_html = '<ul class="treeview-menu">{make_child_menu_html}</ul>'
master_menu_html = """
<li class="{child_menu_flag} {active}">
<a href="{menu_url}"><i class="fa {menu_icon}"></i> <span>{menu_name}</span>{menu_right_flag}</a>
<ul class="treeview-menu">
{children_menu_html}
</ul>
</li>"""
children_menu_html = """
<li class="treeview">
<a href="{menu_url}"><i class="fa fa-circle-o"></i> <span>{menu_name}</span>{menu_right_flag}</a>
{child_menu_html}
</li>"""
parent = menu.parent # 获取当前菜单的父级菜单
if current_parent_id == menu.id or (not parent and current_parent_id):
continue # 如果当前父级菜单ID是自己或没有父级菜单且有当前父级ID则跳过本次循环
if not parent and current_parent_id is None: # 如果没有父级菜单且当前父级ID是None
make_children_menu_html = make_menus_html(menus, parent_id=parent_id, current_parent_id=menu.id)
if not make_children_menu_html:
menu_right_flag = ''
menu_icon = menu.menu_icon.ClassName
if hasattr(menu, 'icon_name'):
menu_icon = menu.icon_name
active = menu_active.split('/')[1]
active = '/%s/' % active
if menu.url == active:
active_menu = 'active'
else:
active_menu = ''
make_master_menu_html = master_menu_html.format(child_menu_flag=child_menu_flag,
active=active_menu,
menu_url=menu.url,
menu_icon=menu_icon,
menu_name=menu.name,
menu_right_flag=menu_right_flag,
children_menu_html=make_children_menu_html)
make_html += make_master_menu_html
elif parent and current_parent_id == parent.id: # 如果有父级且当前父级ID是自己的父级ID4
make_child_menu_html = make_menus_html(menus, parent_id=current_parent_id, current_parent_id=menu.id)
if make_child_menu_html:
child_menu_html = child_menu_html.format(make_child_menu_html=make_child_menu_html)
children_menu_html = children_menu_html.format(menu_url=menu.url,
menu_name=menu.name,
menu_right_flag=menu_right_flag,
child_menu_html=child_menu_html)
else:
if menu.url == menu_active:
active_menu = 'active'
else:
active_menu = ''
children_menu_html = child_menu.format(menu_url=menu.url, menu_name=menu.name, active=active_menu)
make_html += children_menu_html
else:
continue
return make_html def make_menus_processor(request):
menus_obj = MenuInfo.objects.filter(show=0)
global menu_active
menu_active = request.path
menus = make_menus_html(menus=menus_obj, active=menu_active)
return {'menus': format_html(menus)}

模板中间件代码

adminLTE的自动化菜单的更多相关文章

  1. 用C#从数据库动态生成AdminLTE菜单的一种方法

    当前的应用设计风格趋于Flat扁平化,很多基于BootStrap实现了很多UI非常漂亮的管理界面(Bootstrap admin template). 此核心文件开源在Github:https://g ...

  2. yii2 rbac权限控制之菜单menu详细教程

    作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  3. yii2权限控制rbac之菜单menu最详细教程

    前面我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考本文,因为本文是在上文的基础上进行完善和补充. ...

  4. teprunner测试平台用例前置模块开发

    本文开发内容 现在正式进入测试相关功能开发.teprunner测试平台底层是pytest,中间层是tep,还没了解的朋友可以先看看tep的文章,整个平台的设计思路和后面用例的执行都会基于这个工具.te ...

  5. SharePoint自动化系列——Site/Web/List级别的导航菜单

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 需求:在不同的测试用例中,对脚本中不确定的因素需要和用户交互来确定,比如选择哪个site,选择哪个 ...

  6. ABP+AdminLTE+Bootstrap Table权限管理系统第十节--AdminLTE模板菜单处理

    上节我们把布局页,也有的临时的菜单,但是菜单不是应该动态加载的么?,所以我们这节来写菜单.首先我们看一下AdminLTE源码里面的菜单以及结构. <aside class="main- ...

  7. ABP+AdminLTE+Bootstrap Table权限管理系统第九节--AdminLTE引入及模板页和布局和菜单

    返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 AdminLTE AdminLTE 官网地址:https://adminlte.io/themes/AdminLT ...

  8. 修改AdminLTE左侧菜单展开延迟

    AdminLTE左侧菜单展开会有半秒钟的延迟. 看起来会慢半拍. 可修改 admin/dist/js/app.min.js中的 animationSpeed值(默认为500) 如下:

  9. adminlte+layui框架搭建2 - 动态菜单

    动态菜单 参考文章:https://cloud.tencent.com/developer/article/1342558 主要修改两个地方: 1.系统初始化加载一级菜单,在adminlte.js文件 ...

随机推荐

  1. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...

  2. CodeForces Round#313

    第一题想当然了,结果被坑.. 有1的肯定能构成所有的其他数,没有1的肯定构不成1 ,这题T T #include <iostream> #include <cstring> # ...

  3. Android -- 时间轴(ListView)

    1. 实现效果

  4. C# ArrayList的用法

    System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变数组的长度. 一.优点 1. 支持自动改变大小的功能 2. 可以灵活的插入元素 3. 可以 ...

  5. 通过YUM库自动安装Mongodb

    1.1查看操作系统版本 1.2验证当前yum库是否包含mongodb 1.3配置包含mongodb的yum源 1.4再次验证YUM库中的mongodb 1.5 yum库安装mongodb 为方便观察, ...

  6. Socket通讯实例-基本Socket

    转自:http://www.cnblogs.com/mahaisong/archive/2011/07/25/2116475.html (讲的很好,很细) 参考:http://blog.sina.co ...

  7. Unity -- EventSystem完全掌握

    Event System 组成 系统生成的Event System里面主要有两个Components,分别是Event System和Standalone Input Module. 其中Standa ...

  8. matlab函数大全

    Matlab 图像处理相关函数命令大全 一.通用函数: colorbar  显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ col ...

  9. SVM实践

    在Ubuntu上使用libsvm(附上官网链接以及安装方法)进行SVM的实践: 1.代码演示:(来自一段文本分类的代码) # encoding=utf8 __author__ = 'wang' # s ...

  10. js 中将日期转换为星期需要注意的

    new Date(strDate); 中strDate需要是1998/10/30这样的格式,如果是1998-10-30的格式,不一定旧版本的web能兼容