首页 > 其他分享 >django 自定义模版过滤器

django 自定义模版过滤器

时间:2023-01-30 14:48:05浏览次数:44  
标签:return 自定义 模版 value django 60 template timestamp 过滤器

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

模版过滤器必须要放在app中,并且这个app必须要在INSTALLED_APPS中进行安装。然后再在这个app下面创建一个Python包叫做templatetags。再在这个包下面创建一个python文件。比如app的名字叫做book,那么项目结构如下:

- book
    - views.py
    - urls.py
    - models.py
    - templatetags
        - my_filter.py

在创建了存储过滤器的文件后,接下来就是在这个文件中写过滤器了。过滤器实际上就是python中的一个函数,只不过是把这个函数注册到模板库中,以后在模板中就可以使用这个函数了。但是这个函数的参数有限制,第一个参数必须是这个过滤器需要处理的值,第二个参数可有可无,如果有,那么就意味着在模板中可以传递参数。并且过滤器的函数最多只能有两个参数。在写完过滤器后,再使用django.template.Library对象注册进去。示例代码如下:

from django import template

# 创建模板库对象
register = template.Library()

# 过滤器函数
def mycut(value,mystr):
    return value.replace(mystr)

# 将函数注册到模板库中
register.filter("mycut",mycut)

以后想要在模板中使用这个过滤器,就要在模板中load一下这个过滤器所在的模块的名字(也就是这个python文件的名字)。示例代码如下:

{% load my_filter %}

自定义时间计算过滤器:

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

# time_filter.py文件

from datetime import datetime
from django import template

register = template.Library()

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 "%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")
    else:
        return value


register.filter("time_since",time_since)

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

{% load time_filter %}
...
{% value|time_since %}
...

为了更加方便的将函数注册到模版库中当作过滤器。也可以使用装饰器来将一个函数包装成过滤器。示例代码如下:

from django import template
register = template.Library()

@register.filter(name='mycut')
def mycut(value,mystr):
    return value.replace(mystr,"")

标签:return,自定义,模版,value,django,60,template,timestamp,过滤器
From: https://www.cnblogs.com/7798554A/p/17075855.html

相关文章

  • CAD怎么自定义线型?CAD线型自定义步骤
    有些设计师小伙伴绘制CAD图纸的过程中,在调用CAD线型时,觉得软件中自带的线型不适用,想要自定义CAD线型,那么,CAD怎么自定义线型呢?本节教程小编就来给大家分享一下浩辰CAD软件中......
  • django 模版常用过滤器
    模版常用过滤器在模版中,有时候需要对一些数据进行处理以后才能使用。一般在Python中我们是通过函数的形式来完成的。而在模版中,则是通过过滤器来实现的。过滤器使用的是|......
  • 直播电商平台开发,vue 自定义指令过滤特殊字符
    直播电商平台开发,vue自定义指令过滤特殊字符 /** *@tagsinput只可以輸入数字、字母、汉字 *@examplev-emoji */exportdefault(app)=>{ app.directive('e......
  • SAP UI5 应用如何加载自定义 Theme
    要加载外部自定义主题,开发人员可以通过在页面中静态声明或使用Core.setThemeRoot()方法来设置此主题。这非常类似于对位于不同位置的SAPUI5库使用registerModulePat......
  • Django连接数据库
    Mysql配置搭建mysql服务,保证能正常运行pipinstallmysqlclientSetting配置数据库如下是mysql数据库的配置 同步数据库先生成表结构,检查是否有表结构变更:pythonma......
  • Docker 容器添加自定义root ca
    比如如果我们基于了step-ca工具做为我们的ca机制,就会有不可信的问题,业务使用就特别不方便了,以下是一个参考配置实际上很简单就是使用update-ca-certificates更新信息参......
  • js实现自定义网络拓扑图-实战记录
    首先推荐工具库JTopo: jtopo一个好用的交互式HTML5图形库其他的看官方文档            三、基础讲解jtopo的核心对象有Stage、Layer、Canv......
  • SAP UI5 应用的标准 Theme 和自定义 Theme 的加载讨论
    SAPUI5应用的初始主题可以硬编码在应用程序中(在加载SAPUI5的引导程序的脚本标签中)或在加载SAPUI5之前定义的JS配置对象中,例如下面的例子:<scriptid="sap-ui-boots......
  • redhat6 装机自定义LVM分区教程
     分区效果如下 ......
  • Android开发 自定义View_时钟
    前言自定义View实现时钟涉及到三角函数,如果你对三角函数不甚了解或者已经遗忘,请参考我的博客:圆与三角函数的公式与使用  这篇博客详细解释了三角函数公式与对应坐......