自定义模板过滤器及标签
自定义模板过滤器及标签
1.自定义模板过滤器
在哪里定义,代码写在哪里?
代码布局:
app目录下的名为templatetags的文件夹,必须叫这个名字。这个文件夹必须是一个python的包,这个文件夹下一定有一个__init__.py的文件。
自定义的模板标签或模板过滤器就放在这个包下的python模块中(python脚本文件)。
app必须在settings中被注册。
定义:自定义过滤器就是python函数,它有一个或两个参数。
第一个参数就是那个传进来的模板变量
第二个参数是一个普通函数,可以是默认参数,也可以不要这个参数。
注册:
#自定义模板过滤器 from django.template import Library register=Library() #必须用register这个变量名 def my_male(value): """ 转换性别的过滤器 :param value: :return: """ map={ 0:'男', 1:'女' } return map[value] register.filter(my_male)
在模板中使用
1.load标签,引入自定义的过滤器模块,也就是templatetags包里的那个python文件
{% load teacher_filters %}
......
<td>{{student.sex|my_male}}</td>
注意:新建了templatetags文件夹 要重启一下django服务
2个参数
命名
2.自定义模板标签:
可以干任何事情
标签类型:
1.简单标签:实现更复杂的逻辑,也是个普通的python函数。
django.template.Library.simple_tag()
接收许多参数,返回值是你想要显示的数据
创建注册:
from django.template import Library from datetime import datetime register=Library() def current_time(format_str='%Y-%m-%d %H:%M:%S'): #输出当前时间 return datetime.now().strftime(format_str) #注册 register.simple_tag(current_time,name='current')
使用:
{% current format_str %} 跟普通函数的传参数一样,字符创,模板变量,关键字变量
使用上下文变量:
在自定义标签中,使用当前模板中的上下文变量context
def current_time(context,format_str='%Y-%m-%d %H:%M:%S'): #输出当前时间 print(context) return datetime.now().strftime(format_str) #注册 register.simple_tag(current_time,name='current',takes_context=True)
2.包含标签:
通过渲染另一个模板展示数据
定义:
#注册 @register.inclusion_tag('teacher/show_list.html') def show_list(list_data): #一个嵌套标签,实现展示列表数据 return{'ls':list_data}