Python如何实现自定义计算时间过滤器

这篇文章主要介绍Python如何实现自定义计算时间过滤器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在写自定义的过滤器时,因为django.template.Library.filter()本身可以作为一个装饰器,所以可以使用:

register=django.template.Library()
@register.filter代替register.filter("过滤器名","函数名")

如果使用@register.filter进行注册自定义的过滤器,并且没有传递任何参数,那么默认的过滤器名和函数名是相同的,当然,也可以进行修改,只需要在@register.filter("过滤器名"),此时的过滤器名就更改了,就可在DTL模板中使用自定义的过滤器了。

定义时间计算过滤器在显示的时候,时间的显示规则:time距离现在多长时间间隔

  • 如果时间间隔小于1分钟,那么就像是“刚刚”

  • 如果时间间隔大于1分钟小于1小时,那么就显示“xx分钟前”

  • 如果是大于1小时小于24小时,那么就显示“xx小时前”

  • 如果是大于24小时,小于30天,那么就显示“xx天前”'

  • 否则就是显示具体时间

示例代码如下:

自定义过滤器的文件my_fliter.py

@register.filter()
deftime_since(value):
#首先对传进来的时间进行判断,如果是datetime类型的就可以与当前的时间进行比较,
#如果不是datetime类型的,就直接返回value
ifnotisinstance(value,datetime):
returnvalue
#如果可以到达这里,就代表为datetime类型的,
#timedelay.total_seconds()属性
now=datetime.now()
timestamp=(now-value).total_seconds()
iftimestamp<60:
return"刚刚"
eliftimestamp>=60andtimestamp<60*60:
#在python3中如果两数相除,有余数的话,就会保持小数,这个时候我们就可以使用int()函数,进行转换
minutes=int(timestamp/60)
return"%s分钟前"%minutes
eliftimestamp>=60*60andtimestamp<60*60*24:
hours=int(timestamp/60/60)
return"%s小时前"%hours
eliftimestamp>=60*60*24andtimestamp<60*60*24*30:
days=int(timestamp/60/60/24)
return"%s天前"%days
else:
returnvalue.strftime("%Y/%m/%d%H:%M")

views.py中定义视图函数,并且构造一个时间:

fromdjango.shortcutsimportrender
fromdatetimeimportdatetime
defindex(request):
context={
'time':datetime(year=2019,month=1,day=16,hour=23,minute=44,second=0)
}
returnrender(request,'index.html',context=context)

index.html中进行调用:

{#如果想要使用自定义的过滤器的话,就必须要先导入,导入的名称为自定义过滤器所处的文件名#}
{#必须要把app安装到settings.py文件中#}
{%loadmy_fliter%}
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Title</title>
</head>
<body>
{{time|time_since}}
</body>
</html>

浏览器中查看结果:

Python如何实现自定义计算时间过滤器

以上是“Python如何实现自定义计算时间过滤器”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-05-30 14:05:49
收藏
分享
海报
0 条评论
183
上一篇:JS面向对象之单选框的实现方法 下一篇:bootstrap如何实现嵌套模态框
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码