django2中自定义过滤器

一、django中自带的过滤器参考

二、django中自定义过滤器

  • 1、在app下创建一个包templatetags(名字必须是这个)

  • 2、这个app必须在settings.py中注册

  • 3、在templatetags中创建一个xx.py文件

  • 4、下面定义了2个过滤器

    from django import template
    import datetime
    
    register = template.Library()
    
    
    @register.filter
    def chinese_date_format(value):
        """
        一个将时间转换为中国时间的过滤器
        :param value:
        :return:
        """
        if isinstance(value, datetime.datetime):
            return "{}年{}月{}日".format(value.year, value.month, value.day)
        else:
            return value
    
    
    @register.filter
    def add_description(value, tag):
        """
        一个给标签添加tag的过滤器
        :param value:
        :param tag:
        :return:
        """
        return f'{value}({tag})'
    复制代码
  • 5、在需要使用自定义的过滤器的模板中(在django中指的是html页面)

    {% load [你自定义的过滤器的py文件名] %}
    复制代码
  • 6、使用

    ...
    <td>{{ book.name | add_description:"一本书" }}</td>
    <td>{{ book.date | chinese_date_format }}</td>
    ...
    复制代码

三、附加一个常用的过滤器

定义一个多少时间之前的过滤器,使用方式和上面一样的

@register.filter('time_ago')
def time_ago(value):
    """
    定义一个距离当前时间多久之前的过滤器
    :param value:
    :return:
    1.如果时间间隔小于1分钟内,那么就显示刚刚
    2.如果时间间隔大于1分钟小于1小时,那么就显示xx分钟前
    3.如果时间间隔大于1小时小于24小时,那么就显示xx小时前
    4.如果时间间隔大于24小时小于30天,那么就显示xx天前
    5.如果时间间隔大于30天,那么就显示具体时间
    """
    if not isinstance(value, datetime.datetime):
        return value
    now = datetime.datetime.now()
    timestamp = (now - value).total_seconds()
    if timestamp < 60:
        return '刚刚'
    elif timestamp >= 60 and timestamp < 60 * 60:
        return '{}分钟前'.format(int(timestamp / 60))
    elif timestamp >= 60 * 60 and timestamp < 60 * 60 * 24:
        return '{}小时前'.format(timestamp / 60 / 60)
    elif timestamp >= 60 * 60 * 24 and timestamp < 60 * 60 * 23 * 30:
        return '{}天前'.format(int(timestamp / 60 / 60 / 24))
    else:
        return value.strftime('%Y-%m-%d %H:%M')
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值