• 38.Python自定义计算时间过滤器


    在写自定义的过滤器时,因为django.template.Library.filter()本身可以作为一个装饰器,所以可以使用:
    register = django.template.Library()
    
    @register.filter   代替  register.filter("过滤器名","函数名")
    

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

    定义时间计算过滤器在显示的时候,时间的显示规则:time距离现在多长时间间隔
    1. 如果时间间隔小于1分钟,那么就像是“刚刚”
    2. 如果时间间隔大于1分钟小于1小时,那么就显示“xx分钟前”
    3. 如果是大于1小时小于24小时,那么就显示“xx小时前”
    4. 如果是大于24小时,小于30天,那么就显示“xx天前”’
    5. 否则就是显示具体时间
    示例代码如下:
    自定义过滤器的文件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>
    
    浏览器中查看结果:

    在这里插入图片描述

    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    DS博客作业07--查找
    第五次作业——05图
    第四次作业——04树
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客05--指针
    C语言博客作业04--数组
    DS博客作业08--课程总结
    C语言-第0次作业
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12204819.html
Copyright © 2020-2023  润新知