首页 > 其他分享 > 自定义过滤器

自定义过滤器

时间:2023-06-04 20:00:51浏览次数:38  
标签:函数 自定义 filter 参数 过滤器 上下文 模板


过滤器主要是对上下文的内容进行操作处理,如替换、反序和转义等。通过过滤器处理上下文可以将其数据格式或内容转化为我们想要的显示效果,而且相应减少视图的代码量。过滤器的使用方法如下:

                                         自定义过滤器_自定义


若上下文设有过滤器,则模板引擎在解析上下文时,首先由过滤器filter处理上下文variable,然后将处理后的结果进行解析并显示在网页上。variable代表模板上下文,管道符号“|”代表当前上下文使用过滤器,filter代表某个过滤器。单个上下文可以支持多个过滤器同时使用,例如:

                                         自定义过滤器_自定义_02


在使用的过程中,有些过滤器还可以传入参数,但仅支持传入一个参数。带参数的过滤器与参数之间使用冒号隔开,并且两者之间不能留有空格,例如:

                                         自定义过滤器_django_03


django.template.Library.filter()

每当你写好你的过滤器定义的时候,你需要用你的

Library.filter() 方法有两个参数:

  1. 过滤器的名称——字符串。
  2. 编辑函数——一个 Python 函数(不是函数名的字符串)。

你也能以装饰器的模式使用 register.filter():

若你不填name 参数, Django 会将函数名当做过滤器名。

最后,register.filter() 也接受 3 个关键字参数,is_sage,needs_autoescape,和expects_localtime。

模板过滤器期望字符串

django.template.defaultfilters.stringfilter()

如果编写只接收一个字符串作为第一个参数的模板过滤器,你需要使用

Django的内置过滤器可以在源码(\django\template\defaultfilters.py)里找到具体的定义过程


                                         自定义过滤器_django_04

                                         自定义过滤器_django_05

                                         自定义过滤器_django_06


使用过滤器的过程中,上下文、管道符号“|”和过滤器之间没有规定使用空格隔开,但为了符合编码的规范性,建议使用空格隔开。倘若过滤器需要设置参数,过滤器、冒号和参数之间不能有空格,否则会提示异常信息

在实际开发中,如果内置过滤器的功能不太适合开发需求,我们可以自定义过滤器来解决问题

                                         自定义过滤器_自定义_07


过滤器与标签的自定义过程有相似之处,但过滤器的定义过程比标签更简单,只需定义相关函数即可。上述定义的过滤器是实现模板上下文的字符替换,定义过程说明如下:

●函数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

相关文章

  • [MAUI程序设计] 用Handler实现自定义跨平台控件
    @目录Handler与Xamarin.Forms实现的区别为什么要用Handler代替Renderer解耦生命周期管理更细粒度的控制用Effect来实现呢?自定义手势监听控件在各平台上实现TouchRecognizeriOS中的实现Android中的实现Windows中的实现创建控件使用控件最终效果项目地址今天来谈一谈MAUI跨平台技术......
  • 10、KVM自定义网桥实现虚拟机的内部通讯
    基于自定义网桥的虚拟网络两个宿主机:自定义网桥virbr1新增eth1网卡:VMnet1仅主机模式(配好之后,两台宿主机上的虚拟机就可以通过VMnet1相互通信了)原wth0网卡:VMnet8NAT模式和外网相连ubuntu宿主机第一步:在宿主机添加仅主机网卡第二步:创建网桥并进行网卡桥接[root@ubunt~]#vi......
  • 自定义异步注解
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>@RestController@Slf4jpublicclassThread04{@Autowiredprivate......
  • Java实现AWS S3 签名 自定义验证
    前言最近在开发文件存储服务,需要符合s3的协议标准,可以直接接入aws-sdk,本文针对sdk发出请求的鉴权信息进行重新组合再签名验证有效性,sdk版本如下<dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId>......
  • Java实现AWS S3 V4 Authorization自定义验证
    前言最近在开发文件存储服务,需要符合s3的协议标准,可以直接接入aws-sdk,本文针对sdk发出请求的鉴权信息进行重新组合再签名验证有效性,sdk版本如下<dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId>......
  • django 自定义FileField upload_to上传路径
    defuser_directory_path(instance,name):"""clean_data内容:fork,vinclean_data:K:fileV:record1301DL00220230602全部.txtK:nameV:record1301DL00220230602全部.txt"""filename=name[15:2......
  • 包含引用类型字段的自定义结构体,能作为map的key吗
    1.引言在Go语言中,map是一种内置的数据类型,它提供了一种高效的方式来存储和检索数据。map是一种无序的键值对集合,其中每个键与一个值相关联。使用map数据结构可以快速地根据键找到对应的值,而无需遍历整个集合。在Go语言中,map是一种内置的数据类型,可以通过以下方式声明和初......
  • 包含引用类型字段的自定义结构体,能作为map的key吗
    1.引言在Go语言中,map是一种内置的数据类型,它提供了一种高效的方式来存储和检索数据。map是一种无序的键值对集合,其中每个键与一个值相关联。使用map数据结构可以快速地根据键找到对应的值,而无需遍历整个集合。在Go语言中,map是一种内置的数据类型,可以通过以下方式声明和......
  • hibernate中自定义主键生成器
    自定义hibernate主键生成机制[url]http://walle1027.iteye.com/blog/1114824[/url]org.hibernate.id.MultipleHiLoPerTableGenerator主键生成器[url]http://suzefeng8806.iteye.com/blog/923511[/url][url]http://zhongrf.iteye.com/blog/972303[/url]......
  • dubbo源码学习(二) : spring 自定义标签
    做dubbo的配置时很容易发现,dubbo有一套自己的标签,提供给开发者配置,其实每一个标签对应着一个实体,在容器启动的时候,dubbo会对所有的配置进行解析然后将解析后的内容设置到实体里,最终dubbo会根据实体中的值生成贯穿全局的统一URL。利用自定义标签使配置简单明......