Flask学习笔记之:jinja2变量过滤器以及自定义过滤器

Flask学习笔记之:jinja2变量过滤器以及自定义过滤器

何为变量过滤器

网上解释:
 Django和Flask框架中都使用了jinja2模板引擎来渲染模板,通过后端向模板中传递变量,通过过滤器可以修改这些变量,过滤器添加在变量名之后,中间使用竖线分割。
我的理解:
 变量过滤器其实就是执行一个函数,把变量传入函数,把函数的返回值填充到这个位置。

变量过滤器的使用方式

(注意,既然我把变量过滤器看作一个函数,这里我对参数个数的解释就与网上的有些出入,这样解释是为了方便我们自己写过滤器,不要揪着到底算是没有参数还是有一个参数不放,明白我的意思就好了)
使用方式为:变量名 | 过滤器。

{{variable | filter_name(*args)}}

这个variable实际上作为 filter_name函数的第一个参数传入,第二和其它参数从*args中传入。
如果只有一个参数传给过滤器,则可以把括号省略掉

{{variable | filter_name}}

jinja2内置的变量过滤器

常见内建过滤器:
例子:
小写转为大写

<p>{{ 'hello' | upper }}</p>

字符串操作:
safe:禁用转义
capitalize:把变量值的首字母转成大写,其余字母转小写
lower:把值转成小写
upper:把值转成大写
title:把值中的每个单词的首字母都转成大写
reverse:字符串反转
format:格式化输出
striptags:渲染之前把值中所有的HTML标签都删掉
truncate: 字符串截断
列表操作:
first:取第一个元素
last:取最后一个元素
length:获取列表长度
sum:列表求和
sort:列表排序
整块操作

{% filter upper %}
    balabala
    balabala
{% endfilter %}

支持链式调用
在 jinja2 中,过滤器是可以支持链式调用的,示例如下:

{{ "hey, man!" | reverse | upper }}

自定义变量过滤器

尽管jinja2提供了丰富的内置过滤器,但是有些时候还是没办法满足我们的需求。
好在jinja2支持自定义过滤器,我们来写一个:

后端:

def stamp2time(stamp):
    sec_count=int(time.time()-float(stamp))
    if(sec_count<=25):
        return "在线"+"("+  str(sec_count) +"秒前更新)"
    elif(stamp!="0"):
        minite_count=int(sec_count/60)
        hour_count=int((sec_count/3600)%24)
        day_count=int((sec_count/3600)/24)
        tmp_str=' '
        if(day_count>0):
            tmp_str=str(day_count)+"天"
        elif(hour_count>0):
            tmp_str=str(hour_count)+"小时"
        elif(minite_count>0):
            tmp_str=str(minite_count)+"分钟"
        else:
            tmp_str=str(sec_count)+"秒"
        return "离线"+"("+tmp_str+"前更新)"
    else:
        return "从未上线"

#下面两行不要忘记加入!
env = app.jinja_env#取得运行环境
env.filters['stamp2time'] = stamp2time#注册自定义过滤器

前端:

<td>{{u.time|stamp2time}}</td>

其中:u.time传入了数据库中存储的最近一次更新时间的时间戳,经过stamp2time转化后变成了我们需要的文本。
可以看到,过滤器其实就是一个函数,自带的过滤器的函数已经帮我们写好了,自定义变量过滤器的函数我们自己写就好了,就这么简单!

————————————————————————————————————————
END
欢迎大家关注,点赞,收藏哦,您的支持是我加速更新和为您写出更好文章的动力!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值