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

 更新时间:2020年01月17日 11:22:17   作者:一笑而过~一笑奈何  
这篇文章主要介绍了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类型的,
  # timedelay.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("%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 %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  {{ time|time_since }}
</body>
</html>

浏览器中查看结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 一文解读Spring Bean的生命周期

    一文解读Spring Bean的生命周期

    这篇文章主要给大家详细解读Spring Bean的生命周期,文中有详细的代码示例,对我们学习Spring Bean的生命周期有一定的帮助,感兴趣的同学跟着小编一起来学习吧
    2023-07-07
  • Java的Hibernate框架中Criteria查询使用的实例讲解

    Java的Hibernate框架中Criteria查询使用的实例讲解

    这篇文章主要介绍了Java的Hibernate框架中Criteria查询使用的实例讲解,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2016-01-01
  • springboot publish event 事件机制demo分享

    springboot publish event 事件机制demo分享

    这篇文章主要介绍了springboot publish event 事件机制demo,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • SpringBoot中REST API 接口传参的实现

    SpringBoot中REST API 接口传参的实现

    我们在开发 REST API 的过程中,经常需要传递参数,本文主要介绍了SpringBoot中REST API 接口传参的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • spring aop pointcut 添加多个execution方式

    spring aop pointcut 添加多个execution方式

    这篇文章主要介绍了spring aop pointcut 添加多个execution方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • MyBatis中resultMap和resultType的区别详解

    MyBatis中resultMap和resultType的区别详解

    这篇文章主要介绍了MyBatis中resultMap和resultType的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 关于spring中事务的传播机制

    关于spring中事务的传播机制

    这篇文章主要介绍了关于spring中事务的传播机制,所谓事务传播机制,也就是在事务在多个方法的调用中是如何传递的,是重新创建事务还是使用父方法的事务,需要的朋友可以参考下
    2023-05-05
  • Java 代理(Proxy)的原理及应用

    Java 代理(Proxy)的原理及应用

    动态代理技术就是用来产生一个对象的代理对象的。 我们在开发中之所以要产生一个对象的代理对象,主要用于拦截对真实业务对象的访问。本文主要介绍了Java 代理的使用,感兴趣的可以了解一下
    2021-05-05
  • Spring中@Autowired @Resource @Inject三个注解有什么区别

    Spring中@Autowired @Resource @Inject三个注解有什么区别

    在我们使用Spring框架进行日常开发过程中,经常会使用@Autowired, @Resource, @Inject注解来进行依赖注入,下面来介绍一下这三个注解有什么区别
    2023-03-03
  • Maven中央仓库地址配置大全

    Maven中央仓库地址配置大全

    这篇文章主要介绍了Maven中央仓库地址配置大全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论