Django模板之自定义函数

  

我们已经知道了在Django的模板里面,可以使用的循环,如果判断,接收后台的数据,还可以通过延伸和包括来重复使用其他的模板,这一节来学习如何自定义函数。


模板里面有两种方式来自定义函数,分别是simple_tag和过滤方式。


simple_tag:

1首先在应用程序下创建一个templatetags的目录,然后在这个目录下面创建一个py文件,注意这个目录的名字是固定的


 Django模板之自定义函数


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模板之自定义函数


第二种定义函数的方式叫做过滤器,这个和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>


结果如下


 Django模板之自定义函数


那么,除了格式的区别,simple_tag和过滤器还有什么区别呢?,

Django模板之自定义函数