复盘Flask-web网页开发——过滤器的使用

过滤器的使用

  • 什么是过滤器

    过滤器是通过 | 进行使用的,例如 {{ name|length }} 返回的就是name的长度,过滤器相当于一个函数,就是把当前的变量传入到

  • Jinja2模板内置的过滤器

    1. abs(value) : 返回一个数值的绝对值,例如{{ -1 | abs }} ,如果参数的数据类型不为数字时就会报错。
    2. default( value , default_value, doolean = False:如果当前变量没有值,则会用参数里面的值来代替。
    {{ signature|default('此人很懒,什么都没有写。') }}
    

    当我们的signature参数不存在时,即视图函数中没有传入参数的时候,就是使用default里面的默认值。 如果我们从视图函数中传入了signature这个值,但是它的值为'',[],None,{}这些值得时候,就不会使用default()里面的默认值了,因为我们是传入了signature这个变量的,只是值为空的而已,所以default()就不会使用我们传入的默认的值了。这个时候我们可以设置boolean=True,那么当我们传入'',[],None,{}这些值的时候,default()过滤器也回去使用我们传入的默认值了。

    我们其实也可以用使用or来代替default()过滤器。’

    {{ signature|default('此人很懒,什么都没有写。',boolean=True) }}
    *# 等价于下面的or语句*
    {{ signature or '此人很懒,什么都没有写' }}
    
    1. escape:转义字符,会将<、>等符号转义为html重的符号。让html把它当成一个普通的字符窜来进行解析,而不是当成html语言来解析。 例如当我们传入的signature参数为<script>alert("hello")</script>这样的一个字符窜的时候,我们肯定要对它进行转义,否则的话那别人能对我们的网站干的事情就很多了。 其实在flask中,默认是开启了自动转义的功能的,我们不使用escape过滤器也是可以的。
    {{ signature|escape }}
    
    1. safe:告诉模板我们传入的参数是安全的,就不会自动去转义里面的特殊字符,html就会去解析里面的特殊字符。也就是和escape过滤器功能相反。 这个时候如果我们的signature的值为<script>alert("hello")</script>,那么这个里面的字符窜就会被解析了。
    {{ signature|safe }}
    
    1. first(value): 返回序列的第一个元素
    2. last(value): 返回序列的最后一个元素
    3. int(value): 将值转换为int类型
    4. float(value): 将值转换为float类型
    5. string(value): 将变量转化为字符窜
    6. lower(value): 将字符窜转化为小写
    7. upper(value): 将字符窜转化为大写
    8. replace(value,old,new): 将字符窜中的old内容替换为new内容
    9. truncate(value,length=255,killwords=False,end=’…’): 截取length长度的字符窜
  • 自定义过滤器

    在flask里面,虽然拥有很多过滤器,当还是满足不了我们的需求,那么我们可以自定义过滤器

    py文件:

    # 自定义过滤器
    def date_formate(value, format="%Y-%m-%d %H:%M"):
        return value.strftime(format)
    
    app.add_template_filter(date_formate,"dformat")
    
    @app.route('/filter')
    def filter():
        user=User(username='zhiliao',email='3188206221@qq.com')
        mytime=datetime.now()
        return render_template("filter.html",user=user,mytime=mytime)
    

    HTML文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>知了首页</title>
    </head>
    <body>
    <div>{{ user.username }} | {{ user.email }} | {{ user.username|length }}</div>
    <div>{{ mytime|dformat }}</div>
    </body>
    </html>
    

    自定义过滤器的格式

    @app.template_filter('过滤器的名称')  #定义过滤器的名称
    def handler_time(time):               #过滤器的主体函数
    """
    小于一分钟----->刚刚
    大于一分钟小于一小时----->xxx分钟之前
    大于一小时小于24小时------>xxx小时之前
    """
    now = datetime.now()              #获取现在的时间戳
    time_stamp = (now-time).total_seconds()    #获取现在的时间距离我们定义的时间的总秒数
    if isinstance(time,datetime): #如果time不是实例则输出else中的time
        if time_stamp < 60:
            return '刚刚'
        elif 60 <= time_stamp <= 60*60:
            return '%s分钟之前'% int(time_stamp/60)
        elif 60*60<=time_stamp <= 60*60*20:
            return '%s小时之前'%int(time_stamp/3600)
    else:
        return time
    
    

    上面就是在flask自定义过滤器的写法,还是很简单的,我们只需要app.template_filter这个装饰器就可以了,然后里面传入我们过滤器的名字。当我们使用过滤器名称的时候,就会执行handler_time函数,然后将值传入handler_time函数中,所以我们的过滤器函数必须至少有一个参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咻白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值