自定义过滤器和标签

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

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

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

from django import template
from django.utils.safestring import mark_safe
register = template.Library() #register的名字是固定的,不可改变
@register.filter
def filter_multi(v1,v2):
return v1 * v2

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

{% load my_tags %} 

5 使用
在模板中:

# num=12
{% load my_tags %} 
{{ num|filter_multi:2 }} #24

总结:

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


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

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

{% for item in request.session.permission_menu_list %}
<p><a href="{{ item.url }}">{{ item.title }}</a></p>
{% endfor %}

4 点击标签加入active样式:

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

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


解决思路2: 引入inclusion_tag方法:

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

return {"permission_menu_list":permission_menu_list}

在layout.html中:

<div class="menu-body">

{% load web %}
{% get_menu_styles request %}

</div>
原文地址:https://www.cnblogs.com/chenxi67/p/9960613.html