自定义过滤器、标签
一、文件路径配置
- 在项目目录下 创建个名为common的Python包 common/__init__.py
- 将common加入到settings文件中的INSTALLED_APP列表中
- 在common里面创建目录templatetags,在目录里面创建自定义过滤器及标签文件 templatetags/__init__.py&common_extras.py
注意:templatetags这个目录名字是固定的,而里面的模块名是自定义的
二、自定义过滤器
在common_extras.py文件中自定义cut和lower的过滤器功能
def my_lower(value): return value.lower() def my_cut(value,arg): return value.replace(arg,'')
注册过滤器
django.template.Library.filter()
- Library.filter()方法需要两个参数:
- 过滤器的名称(一个字符串对象)
- 编译的函数 – 一个Python函数(不要把函数名写成字符串)
- 可以把register.filter()用作装饰器;
- 没有声明 name 参数,Django将使用函数名作为过滤器的名字。
from django import template register = template.Library def my_lower(value): return value.lower() @register.filter def my_cut(value,arg): return value.replace(arg,'')
使用过滤器
在模板中使用自定义的过滤器
需要使用{% load %}标签将我们的自定义模块加载进来
{% load %} 声明将会载入给定模块名中的标签/过滤器
{% load common_extras %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Book's Index</title> </head> <body> {######过滤器的使用######} 默认的变小写:{{ mystr |lower }}<br> 自定义的变小写:{{ mystr |my_lower }}<br> <br> 默认的切片:{{ mystr |cut:' ' }}<br> 自定义的切片:{{ mystr |my_cut:' ' }} </body> </html>
三、自定义简单标签
简单标签 django.template.Library.simple_tag()
tag()方法有两个参数:
- 模板标记的名称 - 字符串。 如果省略,将使用编译函数的名称。
- 编译的函数 – 一个Python函数(不要把函数名写成字符串)与过滤器注册一样,也可以将其用作装饰器。
四、自定义包含标签
包含标签 django.template.Library.inclusion_tag()
tag()方法有两个参数:
- 模板标记的名称 - 字符串。 如果省略,将使用编译函数的名称。
- 编译的函数 – 一个Python函数(不要把函数名写成字符串)与过滤器注册一样,也可以将其用作装饰器。
包含标签的功能是可以通过渲染另外一个模板来显示一些数据
例如很多地方都可能会用到下面这几行代码,除了choices这个变量不一样之外,其他的都是格式都一样时,那么就可以把这部分代码封装在一个包含标签中.
<ul> {% for i in choices %} <li>{{ i }}</li> {% endfor %} </ul>