自定义过滤器
1 步骤
- 一定要注意必须安装app
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 必须安装的app
"article"
]
创建一个
templatetags
python包, 文件夹下新建模块, 如custom.py
引入
template.Library
并实例化
from django import template
register = template.Library()
- 定义过滤器函数
def handle_date(value):
pass
- 注册过滤器
# name: 过滤器名称, 默认为过滤器函数名
# filter_func: 过滤器函数
register.filter(name="date", filter_func=hand_date)
当然,你也可以使用register.filter
装饰器完成第四三步
@register.filter("handDate")
def hand_date(value: datetime)->str:
if not isinstance(value, datetime):
return str(value)
now = datetime.now()
# 二个datetime对象相减 得到了一个 timedelta 对象
# 利用 `total_seconds` 方法
timeStamp = int((now - value).total_seconds())
if 0 <= timeStamp <= 60:
return "刚刚"
elif 60 < timeStamp <= (60*60):
return "%s分钟前" % (timeStamp//60)
elif (60*60) < timeStamp <= (24*60*60):
return "%s小时前" % (timeStamp//(60*60))
elif (24*60*60) < timeStamp <= (30*24*60*60):
return "%s天前" % (timeStamp//(24*60*60))
elif (30*24*60*60) < timeStamp <= (12*30*24*60*60):
return "%s月前" % (timeStamp//(30*2460*60))
else:
return value.strftime("%Y/%m/%d %H:%M")
- 利用
load
标签在模板引入过滤器, 一般直接引入模块名custom
{% load custom %}
这样你就可以愉快地在模板里面使用过滤器, 也完成自定义过滤器
注意
- 一定要检查App是否安装
- 注意
templatetags
命名