香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

django 自定义过滤器的实现


时间:2022-04-02 10:20 作者:admin610456


自定义模版过滤器

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

模版过滤器必须要放在app中,并且这个app必须要在INSTALLED_APPS中进行安装。然后再在这个app下面创建一个python/' target='_blank'>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 datetimefrom django import templateregister = 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 valueregister.filter("time_since",time_since)

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

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

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

from django import templateregister = template.Library()@register.filter(name='mycut')def mycut(value,mystr):  return value.replace(mystr,"")

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

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)