自定义过滤器和标签

第一步:

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

第二步:

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

第三步:

创建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

第四步:

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

{% load my_tags %} 

第五步:

在模板中使用

{% load my_tags %} 
{{ 变量|filter_multi:变量 }}

自定义标签使用时用{%  %},创建时用@register.simple_tag

 inclusion_tag

from django.utils.safestring import mark_safe
from django.template import Library
import re
register =Library()


@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}

此方法是将返回值返回给html

 自定义标签1

保存当前搜索条件的情况下再增加一个get请求的搜索条件

@register.simple_tag
def gen_role_url(request, new_condition):
    params = request.GET.copy()
    params._mutable = True
    params['new_condition'] = new_condition
    return params.urlencode()
request.GET/POST._mutable = False时,是不可更改的,因此先拷贝,再对拷贝出来的对象进行增加键值,通过urlencode解析成键&值得格式
原文地址:https://www.cnblogs.com/jiaqi-666/p/9960616.html