django 自定义过滤器_adguard自定义过滤器

django 自定义过滤器_adguard自定义过滤器前言虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。自定义过滤器首先在某个app中,创建


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。
 

自定义过滤器

  1. 首先在某个app中,创建一个python包,叫做templatetags,注意,这个包的名字必须为templatetags,不然就找不到。

  2. 在这个templatetags包下面,创建一个python文件用来存储过滤器。

  3. 在新建的python文件中,定义过滤器(也就是函数),这个函数的第一个参数永远是被过滤的那个值,并且如果在使用过滤器的时候传递参数,那么还可以定义另外一个参数。但是过滤器最多只能有2个参数。

  4. 在写完过滤器(函数)后,要使用django.template.Library.filter进行注册。

  5. 还要把这个过滤器所在的这个app添加到settings.INSTALLED_APS中,不然Django也找不到这个过滤器。

  6. 在模板中使用load标签加载过滤器所在的python包。

  7. 可以使用过滤器了。

  8. django.template.Library.filter还可以当作装饰器来使用。如果filter函数没有传递任何参数,那么将会使用这个函数的名字来作为过滤器的名字。当然如果你不想使用函数的名字来作为过滤器的名字,也可以传递一个name参数。示例代码如下:

@register.filter('my_greet')
def greet(value,word):
    return value + word

 

时间过滤器案例

有时候经常会在朋友圈、微博中可以看到一条信息发表的时间,并不是具体的时间,而是距离现在多久。比如刚刚,1分钟前等。这个功能DTL是没有内置这样的过滤器的,因此我们可以自定义一个这样的过滤器。示例代码如下:

# time_filter.py
@register.filter(name="time_since")  # 将函数注册到模版库中当作过滤器
def time_since(value):
    """
       time距离现在的时间间隔
       1. 如果时间间隔小于1分钟以内,那么就显示“刚刚”
       2. 如果是大于1分钟小于1小时,那么就显示“xx分钟前”
       3. 如果是大于1小时小于24小时,那么就显示“xx小时前”
       4. 如果是大于24小时小于30天以内,那么就显示“xx天前”
       5. 否则就是显示具体的时间 2017/10/20 16:15
       """
    if isinstance(value, datetime):
        now = datetime.now()
        timestamp = (now - value).total_seconds()
        if timestamp < 60:
            return "刚刚"
        elif timestamp >= 60 and timestamp < 60 * 60:
            minutes = int(timestamp /60)
            return f"{minutes}分钟前"
        elif timestamp >= 60 * 60 and timestamp < 60 * 60 *24:
            hours = int(timestamp / (60 * 60))
            return f"{hours}小时前"
        elif timestamp >= 60 * 60 * 24 and timestamp < 60 * 60 * 24 * 30:
            days = int(timestamp / (60 * 60 * 24))
            return f"{days}天前"
        else:
            return value.strftime("%Y/%m/%d %H:%M")
    else:
        return value

在模版中使用的示例代码如下:

{% load time_filter %}  <!--加载自定义过滤器,time_filter是创建的python文件的名字-->
...
{% value|time_since %}  <!--使用自定义过滤器-->
...
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165791.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • nginx.conf文件

    nginx.conf文件

    2021年10月9日
  • db browser连接数据库_dbbrowserforsqlite使用教程

    db browser连接数据库_dbbrowserforsqlite使用教程这几天在写一个程序,需要用到SQLITE,但是对于SQLITE不熟悉,在网上找了一个SQLITE查看器这个查看器叫做:www./database/118822.html这个查看器可以新建SQLITE文件数据库,可以建立表索引,写SQL语句,编辑表数据不过这个查看器支持的SQLITE数据库引擎版本低了一点,先介绍一下SQLiteDatabaseBrowser2.0是怎么用的?主界面将SQLIT…

    2022年9月9日
  • ac测评题库_acwing算法基础

    ac测评题库_acwing算法基础幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, 老师需要满足小朋友们的 K 个要求。幼儿园的糖果总是有限的,老师想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。输入格式输入的第一行是两个整数 N,K。接下来 K 行,表示分配糖果时需要满足的关系,每行 3 个数字 X,A,B。如果 X=1.表示第 A 个小

    2022年8月9日
  • linux启动ftp命令_linux安装ftp命令

    linux启动ftp命令_linux安装ftp命令ftp服务器在网上较为常见,Linuxftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件下面由学习啦小编为大家整理了linux下开启ftp命令的相关知识,希望对大家有所帮助!linux下启动FTP命令的方式一般linux都有vsftpd吧,启动命令是servicevsftpdstart,你要限制匿名登录的话,修改它的配置文件/etc/vsftpd/vsftpd.conf,把an…

    2022年9月21日
  • java ee eclipse使用教程(使用maven创建web项目)

    笔者开发javaee项目时惯用myeclipse,但由于个人笔记本性能较低,myeclipse对内存的消耗极大,所以考虑换成eclipse开发。本文介绍eclipse配置javaee开发环境的一些体会。配置tomcat与myeclipse配置tomcat的方式不同,eclipse需要先安装tomcat插件,再指定tomcat的路径。第一步:将解压后的zip文件置于eclipse/plugins目录…

    2022年4月10日
  • MySQL中将多行查询结果合并为一行展示SQL语句书写

    MySQL中将多行查询结果合并为一行展示SQL语句书写

    2020年11月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号