Django的模板系统自带了一系列的内建标签和过滤器,通常状况下能够知足开发要求,若是以为需更精准的模板标签或者过滤器,能够本身编写模板标签和过滤器,而后使用{% load %}标签使用他们。最好是查看Django的文档:自定义模板标签和过滤器,这里仅仅简单的叙述一下,大部分仍是参考官方文档。python
自定义过滤器django
1.代码布局
自定义标签和过滤器必须依赖于一个django app,也就是说,自定义标签和过滤器是绑定app的。该app应该包含一个templatetags目录,这个目录应该和model.py,views.py在同一个层级,记得在该目录下创建一个__init__.py文件一遍django知道这是一个python包。在该目录下,你能够新建一个python模块文件,文件名不要和其余app中的冲突就好。例如:app
polls/ models.py templatetags/ __init__.py poll_extras.py views.py
而后在你的模板文件中你能够这样使用你的自定义标签和过滤器:函数
{% load poll_extras %}
注意事项:
包含templatetags目录的app必定要在INSTALLED_APPS列表里面
{% load %}load的是模块名,而不是app名
记得要引入template模块,建立一个register对象布局
from django import template register=template.Library() # 注册
2.编写自定义过滤器
自定义过滤器就是接受一个或者连个参数的python函数。例如{{var | foo:"bar"}},过滤器foo接受变量var和参数bar。
过滤器函数总要返回一些内容,而且不该该抛出异常,若是有异常,也应该安静的出错,因此出错的时候要不返回原始的输入或者空串,下面是一个例子:code
def cut(value, arg): """Removes all values of arg from the given string""" return value.replace(arg, '') # 使用 {{ somevariable|cut:"0" }}
若是过滤器不接受参数,只须要这样写orm
def lower(value): # 只有一个参数 return value.lower()
3.注册自定义的过滤器
一旦定义好你的过滤器,你须要注册这个过滤器,有两种方式,一种是上面提到的template.Library(),另外一种是装饰器对象
#第一种方法 register.filter('cut', cut) register.filter('lower', lower) #第二种方法 @register.filter(name='cut') def cut(value, arg): return value.replace(arg, '') @register.filter def lower(value): return value.lower()
详细内容请查阅Django的文档:自定义模板标签和过滤器开发
编写自定义模板标签文档
标签比过滤器更复杂,由于标签能够作任何事情。Django提供了许多快捷方式,能够更轻松地编写大多数类型的标签。首先,咱们将探索这些快捷方式,而后解释如何在快捷方式不够强大的状况下从头开始编写标记
为了简化这些类型标签的建立,Django提供了一个辅助函数 simple_tag。这个函数是一个方法 django.template.Library,它接受一个接受任意数量参数的函数,将它包装在一个render函数中,并将上面提到的其余必要位包装在模板系统中
current_time所以,咱们的函数能够这样写:
import datetime from django import template register = template.Library() @register.simple_tag def current_time(format_string): return datetime.datetime.now().strftime(format_string)
更多内容还请查阅Django的文档:自定义模板标签和过滤器,不过这些已经基本足够使用了。