自定义模板标签和过滤器必须位于 Django 的某个应用中。这个应用应该包含一个名为 templatetags 的文件夹,和 models.py、views.py 等文件处于同一级别目录下。
本例中,我们创建一个名为 myApp 的应用,在该应用内,创建一个名为 templatetags 的文件夹,这里可能需要你创建 __init__.py
文件以使得该目录可以作为 Python 的包。
现在我们在 templatetags 文件夹下创建一个 myfilter.py
文件,我们自定义的过滤器在这里编写。
编辑 myfilter.py
文件:
from django import template
register = template.Library()
# 自定义的过滤器
def add_something(value):
value = value + '新增内容'
return value
# 注册自定义的过滤器
register.filter('add_something', add_something)
现在过滤器 add_something 能够在模板里使用了。
编写 views.py
:
from django.shortcuts import render
def test(request):
context = {}
my_content = '12345'
context['my_content'] = my_content
return render(request, 'test.html', context)
编写 html 文件,记住,要使用 {% load myfilter %}
标签加载我们自定义的过滤器:
<!DOCTYPE html>
{% load myfilter %}
<html>
<head>
<title>test</title>
</head>
<body>
{{ my_content|add_something }}
</body>
</html>
网页输出内容为:
12345新增内容
自定义过滤器生效。
编写带参数的过滤器
编辑 myfilter.py
文件:
from django import template
register = template.Library()
# 自定义的过滤器
def add_something(value, arg):
value = value + str(arg)
return value
# 注册自定义的过滤器
register.filter('add_something', add_something)
编写 html 文件:
<!DOCTYPE html>
{% load myfilter %}
<html>
<head>
<title>test</title>
</head>
<body>
{{ my_content|add_something:'abc' }}
</body>
</html>
网页输出为:
12345abc
编写带参数的过滤器生效。
注册自定义过滤器
除了上文提到的方法外,还能用装饰器来注册:
from django import template
register = template.Library()
# 自定义的过滤器并注册
@register.filter(name='add_something')
def add_something(value, arg):
value = value + str(arg)
return value