我们已经知道了在Django的模板里面,可以使用的循环,如果判断,接收后台的数据,还可以通过延伸和包括来重复使用其他的模板,这一节来学习如何自定义函数。
模板里面有两种方式来自定义函数,分别是simple_tag和过滤方式。
simple_tag:
1首先在应用程序下创建一个templatetags的目录,然后在这个目录下面创建一个py文件,注意这个目录的名字是固定的
2。,然后在这个py文件里面,导入模板类,实例化一个对象注册,然后执行一个装饰器simple_tag,装饰器下面是自己的函数
请注意,除了自己写的函数,其余所有这些参数的名字都是固定的!
时间=__author__ “管理员” 得到django import 模板 得到django.utils.safestring import  mark_safe 时间=register template.Library () @register.simple_tag def addnum (a1, a2, a3): ,,,return a1 + a2 + a3
3。和数据库的操作一样,需要在设置。py里面注册这个应用
INSTALLED_APPS =, ( ,,,“django.contrib.admin”, ,,,“django.contrib.auth”, ,,,“django.contrib.contenttypes”, ,,,“django.contrib.sessions”, ,,,“django.contrib.messages”, ,,,“django.contrib.staticfiles”, ,,,“app01”, )
4。在要使用的模板文件里面顶部导入我们写的python文件,就可以调用了。调用的时候空格距离无所谓
例如
{%,load calculation %} & lt; ! DOCTYPE html> & lt; html  lang=癳n”比; & lt; head> ,,,& lt; meta charset=皍tf - 8”比; ,,,& lt; title> & lt;/title> & lt;/head> & lt; body> ,,,& lt; p> ,,,,,,,{%,addnum ,, 2,,, 5, 6, %} ,,,& lt;/p> ,, & lt;/body> & lt;/html>
第二种定义函数的方式叫做过滤器,这个和Django自带的函数使用方式非常类似。
首先看几个自带的例子
比如我可以直接传入一个字符串,然后通过管道符号,后面跟一个字符串的函数让他改变大小写或者切片
,,,,& lt; p> ,,,,,,,,{{,name }} ,,,& lt;/p> ,,,& lt; p> ,,,,,,,{{,名字| upper }} ,,,& lt;/p> ,,,& lt; p> ,,,,,,,{{,名字| truncatechars:“10”,}} ,,,& lt;/p>
如果希望使用类似的格式来调用自己的函数,我们可以使用过滤器
过滤器的步骤和simple_tag非常类似。首先仍然是创建templatetags目录,然后创建一个py文件,然后实例化一个寄存器对象。区别在于装饰器不同了,这次是@register。过滤器
比如
__author__ =,“管理员” 得到django import 模板 得到django.utils.safestring import  mark_safe 时间=register template.Library () @register.simple_tag def addnum (a1, a2, a3): ,,,return a1 + a2 + a3 @register.filter def mulnum (a1, a2): ,,,return a1 * a2
接下来步骤一样,需要在设置。py里面注册应用,然后模板文件加载这个py文件,调用的时候不是{%函数名参数1参数2参数3%}的格式,而是{{参数1 |函数名:“参数2”}}
{%,load calculation %} & lt; ! DOCTYPE html> & lt; html  lang=癳n”比; & lt; head> ,,,& lt; meta charset=皍tf - 8”比; ,,,& lt; title> & lt;/title> & lt;/head> & lt; body> ,,,& lt; p> ,,,,,,,{%,addnum ,, 2,,, 5, 6, %} ,,,& lt;/p> ,,,& lt; p> ,,,,,,,,{{,name }} ,,,& lt;/p> ,,,& lt; p> ,,,,,,,{{,名字| upper }} ,,,& lt;/p> ,,,& lt; p> ,,,,,,,{{,名字| truncatechars:“10”,}} ,,,& lt;/p> ,,,{{,30 | mulnum: 30,}} & lt;/body> & lt;/html>
结果如下
那么,除了格式的区别,simple_tag和过滤器还有什么区别呢?,