day20-自定义filter
一、前言
之前我们学习了@register.simple_tag,我们今天来学习一下@register.filter,这个干吗的呐?这个是用于我们之前写的另外一种形式如下:
{{ bio|truncatewords:"30" }}
类似于这种的,其实是这样的:bio和"30"都是参数,而truncatewords是函数,这个两个参数传入到truncatewords函数里面去处理,然后返回值回来,就是这样:
{{ 参数一|函数名:参数二 }}
那这个是怎么实现的呐 ?今天我们就来学习一下,另外一种用法@register.filter的用法
二、自定义filter
自定义filter的步骤和simple_tag一模一样,只是有些稍微不一样,我们只需要说下不一样的地方,一样的地方请参照另外一篇博客:day20-自定义simple_tag
a、创建任意的.py文件,sgg.py
说明:最多只能传入两个参数,不能有第三个以上的参数
@register.filter def shabihong(a1,a2): return a1 + a2
b、 使用filter
说明:这边'cang'和‘laoshi’,分别是参数1和参数2,shabihong是函数,参数2也可以是数字类型,但是函数需要转换成字符串类型的。
{{ "cang"|shabihong:"laoshi" }} #这边中间不能有空格
c、使用注意
说明:load需要在extends的下面
{% extends 'master.html' %} #extends在上面 {% load sgg %} #load在下面
三、filter和simple_tag的区别
3.1、filter
①支持if...else语句
{% if "cang"|shabihong:"laoshi" %} {% endif %}
②函数(shabihong),只能传入两个参数,不能传入超过两个以上的参数
③使用filter时,中间不能有空格
3.2、simple_tag
①不支持if....else...语句
②可以支持传入多个参数
#函数 @register.simple_tag def my_simple_time(v1,v2,v3): return v1 + v2 + v3 #模板 {% my_simple_time 1 2 3 %}
③使用 simple_tag 可以有空格,而且可以有多个空格