标签:流程 %s icon tle request html query default 代码
class Permission(models.Model):
"""
权限表
"""
title = models.CharField(verbose_name=‘标题‘, max_length=32)
url = models.CharField(verbose_name=‘含正则的URL‘, max_length=128)
# 新增两个字段用于动态生成一级菜单,is_menu判断是否可做菜单
is_menu = models.BooleanField(verbose_name=‘是否可做菜单‘, default=False)
icon = models.CharField(max_length=32, null=True, blank=True)
def __str__(self):
return self.title
# views.py
# 登陆的时候把用户信息,权限信息, 菜单信息写入session
permission_query = obj.roles.filter(permissions__url__isnull).values(‘permissions__url‘, ‘permissions_is_nemu‘, ‘permissions_icon‘).distinct()去重
#权限信息和菜单信息分别写入session
menu_list = []
permission_list = []
for row in permission_queryset:
permission_list_append({"permissions_url":row["permissions_url"]})
if row["permissions_is_menu"]:
menu_list.append({"title": row["permissions_title"], ‘icon‘:row["permissions_icon"], ‘url‘: row["permissions_url"]})
# 前端页面动态生成一级菜单
{%for item in request.session.menu_list%}
{{item.title}}
{% emdfor %}
升级以上代码
"""执行流程:先找到模板(menu.html),根据menu函数返回值渲染模板"""
在app下创建templatetags
from django.template import Library
register = Library()
@register.inclusion_tag(‘menu.html‘)
def menu(request):
menu_list = request.session.get(‘menu_session‘)
# 给按钮增加选中效果
for item in menu_list:
reg = ‘^%s$‘ % item[‘url‘]
if re.match(reg, request.path_info):
item[‘class‘] = ‘active‘
return {‘menu_list‘: menu_list}
# menu.html
{%for item in menu_list%}
{{item.title}}
{% emdfor %}
# 把menu导入主html
{% load menu%} # templatetags 下的py文件名
# 在主html中使用
{% menu request%} # request是要传给menu的参数
标签:流程 %s icon tle request html query default 代码
原文地址:https://www.cnblogs.com/bibicode/p/13604913.html