zoukankan      html  css  js  c++  java
  • 自定义过滤器和标签,动态显示菜单权限

    1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.

    2、在app中创建templatetags模块(模块名只能是templatetags)

    3、创建任意 .py 文件,如:my_tags.py

     1 from django import template
     2 from django.utils.safestring import mark_safe
     3  
     4 register = template.Library()   #register的名字是固定的,不可改变
     5  
     6  
     7 @register.filter
     8 def filter_multi(v1,v2):
     9     return  v1 * v2
    10 <br>
    11 @register.simple_tag
    12 def simple_tag_multi(v1,v2):
    13     return  v1 * v2
    14 <br>
    15 @register.simple_tag
    16 def my_input(id,arg):
    17     result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    18     return mark_safe(result)

    4、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py

    1 {% load my_tags %} 

    5、使用simple_tag和filter(如何调用)

     1 -------------------------------.html
     2 {% load xxx %}  
     3       
     4 # num=12
     5 {{ num|filter_multi:2 }} #24
     6  
     7 {{ num|filter_multi:"[22,333,4444]" }}
     8  
     9 {% simple_tag_multi 2 5 %}  参数不限,但不能放在if for语句中
    10 {% simple_tag_multi num 5 %}

    注意:filter可以用在if等语句后,simple_tag不可以

    1 {% if num|filter_multi:30 > 100 %}
    2     {{ num|filter_multi:30 }}
    3 {% endif %}

    动态显示菜单权限

    1 修改表结构:
    在权限表中加入is_menu和icon两个字段用来表示该权限是否是菜单权限

    2 登录成功后:
    注入该用户的权限列表和菜单权限列表注入到session中
    permission_menu_list=[{},{}]

    3 在菜单区域(side_bar):渲染出菜单链接标签:

    解决思路1:每一个返回母版的视图函数中

    1 permission_menu_list = request.session.get("permission_menu_list")
    2 for item in permission_menu_list:
    3     if re.search("^{}$".format(item["url"]), request.path):
    4         item["class"] = "active"

    解决思路2:引入inclusion_tag方法

    1 @register.inclusion_tag("rbac/menu.html")
    2 def get_menu_styles(request):
    3     permission_menu_list = request.session.get("permission_menu_list")
    4     for item in permission_menu_list:
    5         if re.search("^{}$".format(item["url"]), request.path):
    6             item["class"] = "active"
    7     return {"permission_menu_list":permission_menu_list}

    在母版html中

    <div class="menu-body">
        {% load web %}
        {% get_menu_styles request %}
    </div>
  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9960612.html
Copyright © 2011-2022 走看看