自定义过滤器和标签
第一步:
在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解析成键&值得格式