自定义模板过滤器
1.首先在某个app中,创建一个python包,叫做“templatetags”,注意,这个包的名字一定要是“templatetags”,否者的话,就会找不到定义的过滤器。
2.在创建的tamplatetags包下面,创建一个python文件,用来存储过滤器。
3.在新建的python文件中,定义过滤器(也就是函数),这个函数的第一个参数一定是被过滤的那个参数,并且如果在使用过滤器的时候要从视图函数中传递一个参数的话,就可以在过滤器中再定义一个参数,但是注意,过滤器函数最多只能有两个参数。
4.在写完过滤器函数之后,一定要把过滤器进行注册,不注册,不会进行执行定义的过滤器函数的。首先要使用django.template.Library.filter进行注册。
5.还要把这个过滤器所在的这个app添加到“settings.py”中的INSTALLD_APPS中,否者的话,就找不到这个app。
6.在模板中使用“load”标签进行加载过滤器所在的python包。
7.之后就可以进行传递参数,使用过滤器了。
示例代码如下:
views.py中代码如下:
from django.shortcuts import render
def index(request):
context = {
'value':'Hello'
}
return render(request,'index.html',context=context)
在urls.py中进行视图与url的映射:
from django.urls import path
from article import views
urlpatterns = [
path('',views.index, name = 'index'),
]
自定义的过滤器所在文件:my_fliter.py
from django import template
# 定义一个类
register = template.Library()
# 设置默认值,如果不从视图函数中船机来参数值的话,就为默认值None
def greet(value,word=None):
return value + word
# filter()函数中第一个参数为:过滤器的名字,第二个参数为函数的名称
register.filter("greet",greet)
在DTL模板index.html中进行使用自定义的过滤器:
{# 如果想要使用自定义的过滤器的话,就必须要先导入 ,导入的名称为自定义过滤器所处的文件名 #}
{# 必须要把app安装到settings.pyw文件中 #}
{% load my_fliter %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ value|greet:'小蚂蚁' }}
</body>
</html>