Python自定义计算时间过滤器实现过程解析

网友投稿 749 2023-06-29

python自定义计算时间过滤器实现过程解析

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()

def time_since(value):

# 首先对传进来的时间进行判断,如果是datetime类型的就可以与当前的时间进行比较,

# 如果不是datetime类型的,就直接返回value

if not isinstance(value,datetime):

return value

# 如果可以到达这里,就代表为datetime类型的,

# timedelhttp://ay.total_seconds()属性

now = datetime.now()

timestamp = (now - value).total_seconds()

if timestamp < 60:

return "刚刚"

elif timestamp >= 60 and timestamp < 60*60:

# 在python3中如果两数相除,有余数的话,就会保持小数,这个时候我们就可以使用int()函数,进行转换

minutes = int(timestamp/60)

return "%s分钟前" % minutes

elif timestamp >= 60*60 and timestamp < 60*60*24:

hours = int(timestamp/60/60)

return "%s小时前" % hours

elif timestamp >= 60*60*24 and timestamp < 60*60*24*30:

days = int(timestamp/60/60/24)

return "%s天前" % days

else:

return value.strftime(http://"%Y/%m/%d %H:%M")

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

from django.shortcuts import render

from datetime import datetime

def index(request):

context = {

'time': datetime(year=2019,month=1,day=16,hour=23,minute=44,second=0)

}

return render(request,'index.html',context=context)

index.html中进行调用:

{# 如果想要使用自定义的过滤器的话,就必须要先导入 ,导入的名称为自定义过滤器所处的文件名 #}

{# 必须要把app安装到settings.py文件中 #}

{% load my_fliter %}

{{ time|time_since }}

浏览器中查看结果:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springbean的几种注入方式都了解吗
下一篇:Spring Boot通过Junit实现单元测试过程解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~