django中自定义simpletag,即使用自己定义的函数在html中处理数据。

 

步骤:

1、创建并注册app

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'mytag',
]

2、在此app下创建目录templatetags

3、在templatetags目录下创建任意py文件,在文件中创建template对象register

from django import template

register = template.Library()


@register.simple_tag
def testtag(v1, v2):
    return v1 + v2

4.修改html

顶部添加{% load ttag %}

{% load ttag %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>tag</title>
</head>
<body>
    <span>{% testtag 4 7 %}</span>
</body>
</html>

效果:

 

 

自定义filter和tag类似

修改 @register.simple_tag 为 @register.filter

使用方式变为:{{ 'param1'|testfilter:'param2' }}

代码:

ttag.py

from django import template

register = template.Library()


@register.filter
def testfilter(v1, v2):
    return v1 + v2

 

{% load ttag %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>tag</title>
</head>
<body>
    <span>{% testtag 4 7 %}</span>
    <span>{{ 'Hello'|testfilter:'World!' }}</span>
</body>
</html>

效果:

 

两者对比:

simpletag不能作为if条件,而filter可以;

filter的参数必须放到字符串里而且不能加空格,而simpletag的参数以空格分割;