过滤器主要是对上下文的内容进行操作处理,如替换、反序和转义等。通过过滤器处理上下文可以将其数据格式或内容转化为我们想要的显示效果,而且相应减少视图的代码量。过滤器的使用方法如下:
若上下文设有过滤器,则模板引擎在解析上下文时,首先由过滤器filter处理上下文variable,然后将处理后的结果进行解析并显示在网页上。variable代表模板上下文,管道符号“|”代表当前上下文使用过滤器,filter代表某个过滤器。单个上下文可以支持多个过滤器同时使用,例如:
在使用的过程中,有些过滤器还可以传入参数,但仅支持传入一个参数。带参数的过滤器与参数之间使用冒号隔开,并且两者之间不能留有空格,例如:
django.template.Library.filter()
每当你写好你的过滤器定义的时候,你需要用你的
Library.filter() 方法有两个参数:
- 过滤器的名称——字符串。
- 编辑函数——一个 Python 函数(不是函数名的字符串)。
你也能以装饰器的模式使用 register.filter():
若你不填name 参数, Django 会将函数名当做过滤器名。
最后,register.filter() 也接受 3 个关键字参数,is_sage,needs_autoescape,和expects_localtime。
模板过滤器期望字符串
django.template.defaultfilters.stringfilter()
如果编写只接收一个字符串作为第一个参数的模板过滤器,你需要使用
Django的内置过滤器可以在源码(\django\template\defaultfilters.py)里找到具体的定义过程
使用过滤器的过程中,上下文、管道符号“|”和过滤器之间没有规定使用空格隔开,但为了符合编码的规范性,建议使用空格隔开。倘若过滤器需要设置参数,过滤器、冒号和参数之间不能有空格,否则会提示异常信息
在实际开发中,如果内置过滤器的功能不太适合开发需求,我们可以自定义过滤器来解决问题
过滤器与标签的自定义过程有相似之处,但过滤器的定义过程比标签更简单,只需定义相关函数即可。上述定义的过滤器是实现模板上下文的字符替换,定义过程说明如下:
●函数do_replace由装饰器register.filter(name='replace')处理,对函数执行过滤器注册操作。
●装饰器参数name用于为过滤器命名,如果没有设置参数name,就以函数名作为过滤器名。函数名没有具体要求,一般以“do_过滤器名称”或“过滤器名称”作为命名规范。
●参数value代表使用当前过滤器的模板上下文,参数agrs代表过滤器的参数。函数将参数agrs以冒号进行分割,用于参数value(模板上下文)进行字符串替换操作,函数必须将处理结果返回,否则在使用过程中会出现异常信息。
模板文件index.html使用自定义过滤器时,需要使用{% load myfilter %}导入过滤器文件,这样模板引擎才能找到自定义过滤器,否则会提示TemplateSyntaxError异常。过滤器replace将模板上下文value进行字符串替换,将value里面的Python替换成Django
标签:函数,自定义,filter,参数,过滤器,上下文,模板 From: https://blog.51cto.com/576642026/6412194