django过滤器(django 自定义过滤器的实现)
django过滤器
django 自定义过滤器的实现自定义模版过滤器
虽然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,"") |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://www.jianshu.com/p/4ceeee528430
- vuejs filter过滤器的使用(Vue过滤器filter实现及应用场景详解)
- MVC过滤器的用法
- vue三种判断条件(Vue中插槽和过滤器的深入讲解)
- angularjs过滤器
- mysql拼接和过滤(mysql 如何动态修改复制过滤器)
- django过滤器(django 自定义过滤器的实现)
- vue过滤器使用思路(vue 过滤器和自定义指令的使用)
- tomcat作用及原理(详解Tomcat常用的过滤器)
- vue过滤器filters怎么用(如何使用vue过滤器filter)
- vuejs过滤器使用教程(vue3删除过滤器的原因)
- nginx过滤器漏洞(Nginx反爬虫策略,防止UA抓取网站)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
- 《红 雄安》系列广播剧第一集 水上奇兵雁翎队(雄安系列广播剧第一集)
- 小说 小伙穿越成刘备,用现代知识指挥作战,众谋士都看呆了(小伙穿越成刘备)
- 解析葡萄牙6-1瑞士 进攻多点开花,贡萨洛-拉莫斯一战成名(解析葡萄牙6-1瑞士)
- 这支 奇兵队 腕大 有范儿还各怀绝技,毒贩杀人犯见了都要仓皇而逃(这支奇兵队腕大)
- 雄藩崛起 奇兵队与幕末长州藩军事改革(雄藩崛起奇兵队与幕末长州藩军事改革)
热门推荐
- js分号的使用
- dedecms后台账号(dedecms批量删除会员的SQL命令)
- ASP.NET批量下载文件
- apache tomcat安装教程(Apache及Tomcat搭建集群环境过程解析)
- django分页器图(Django框架实现分页显示内容的方法详解)
- sql server案例(SQL Server作业报错特殊案例分析)
- python class转json(Python对象转换为json的方法步骤)
- 织梦栏目设置封面显示不正常(织梦列表页分页错位分页显示为竖排的解决方法)
- python怎么自动刷抖音(python实现抖音点赞功能)
- react中state的作用是什么(React中useEffect 与 useLayoutEffect的区别)