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 可以有空格,而且可以有多个空格

posted @ 2018-03-28 15:36  帅丶高高  阅读(176)  评论(0编辑  收藏  举报