自定义模板语言之simple_tag和自定义过滤器

Posted 23云恋49枫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义模板语言之simple_tag和自定义过滤器相关的知识,希望对你有一定的参考价值。

扩展你的模板系统

一般是扩展模板的tag和filter两个功能。可以用来创建你自己的tag和filter功能库。

创建模板库

分为两步:
1. 首先决定由模板库在哪一个注册的app下放置,你可以放在一个已有的app目录下,也可以新建一个专门管理模板库的app,比如python manage.py startapp myTemplateLibrary。推荐后者,因为可以方便将来的重用。
 
2. 在app目录下创建templatetags子目录,并在里面创建两个文件,__init__.py,用来声明这是一个包,另一个是你的tag/filter定义文件。比如myNewLibrary.py,那么在模板文件中可以这样使用:{% load myNewLibrary %}
 
在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名
{% load xx %}
自定义simple_tag
在templatetags目录下的py文件中写:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from django import template
from django.utils.safestring import mark_safe

register = template.Library()

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

在HTML中写:

{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{% my_simple_time 1 2 3%}

</body>
</html>

自定义simple_tag的html中不能用于if条件作为判断,so引出了自定义过滤器函数

自定义过滤器函数

(最多俩个参数,html中可以有if条件语句)
自定义的过滤器就是一个带1,2个参数的python函数,一个参数放变量值,一个用来放选项值,比如{{ var|remove:"bar" }}, var是变量值,"bar"是选项值。
在templatetags目录下的py文件中写:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from django import template
from django.utils.safestring import mark_safe
register = template.Library()

@register.filter
def detail3(value,arg):
    allcount, remainder = arg.split(\',\')
    allcount = int(allcount)
    remainder = int(remainder)
    if value%allcount == remainder:
        return True
    return False
在HTML中写:
{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{{  23|detail4:"4,0" }}

{% if  23|detail4:"4,0" %}
<h1>123</h1>
{% endif %}

</body>
</html>

 

以上是关于自定义模板语言之simple_tag和自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django(模板语言-自定义filter和simple_tag)

18)django-模板的过滤器和tag,自定义simple_tag和filter

Django之模板层-自定义过滤器以及标签

Django模板之自定义过滤器/标签/组件

模板语言 自定义函数simple_tag

通过 simple_tag 向 Django 模板发送数据