自定义过滤器及标签
自定义过滤器及标签
代码布局(要死记)
# 在app目录下新建一个名为templatetags的文件夹,必须取这个名字,这个文件夹必须是一个python的包,就是一定有__ init __.py文件
# app必须在settings中被注册
一、自定义过滤器
定义:自定义过滤器就是一个python函数,它有一个或2个参数
特点:第一个参数就是那个传进来的模板变量;第二个参数就是一个普通参数,可以是默认参数,也可以不要这个参数
例1、(当一个参数的时候)操作:
第一步:在app目录下新建python package 取名为templatetags文件夹
第二步:在templatetags文件夹下新建一个python文件,取名为teacher_filters.py文件
第三步:在teacher_filters.py文件中写入函数代码(功能转换性别的过滤器):
from django.template import Library
register = Library() (必须用register这个变量)
@register.filter(name = 'male') (# 这句装饰器一定要写,表示注册)
def my_male(value):
map={0:"女",1:"男"}
return map[value]
第四步:在模板中使用(用Load标签,引入自定义的过滤器模块,也就是templatetags文件包里的teacher_filters.py文件)
打开student_list_page.html文件写入
{% load teacher_filters %} (这句话写在头部)
<td> {{ student.sex | male }}</td>
例2:(当二个参数的时候)操作:
第一步,第二步同上
第三步:在teacher_filters.py文件中写入函数代码(功能转换性别的过滤器):
from django.template import Library
register = Library() (必须用register这个变量)
@register.filter(name = 'male') (# 这句装饰器一定要写,表示注册)
def my_male(value,language = 'zh'):
map={ 'zh':{0:"女",1:"男"},‘en’:{0:"girl",1:"boy"} }
return map [language] [value]
第四步:在模板中使用(用Load标签,引入自定义的过滤器模块,也就是templatetags文件包里的teacher_filters.py文件)
打开student_list_page.html文件写入
{% load teacher_filters %} (这句话写在头部)
<td> {{ student.sex | male:'en' }}</td>
注:第二个参数language的默认值是'zh',如果写了en值 的话,就是英文的girl和boy
二、自定义模板标签
1、简单标签
注册用:djagno.template.Library.simple_tag()
可以接收需多参数
代码布局与自定义过滤器一样
第一步:在templatetags文件夹中新建一个teacher_tags.py文件
第二步:在teacher_tags.py文件中写入函数代码(功能是显示当前日期时间)
from django.template import Library
from datetime import datetime
register = Library()
@register.simple_tag(name='current')取个名字
def current_time(format_str = '%Y-%m-%d %H:%M:%S'):
return datetime.now().strftime(format_str)
第三步:使用,打开base.html文件,在头部写入{% Load teacher_tags %};然后在中间写入{ % current %},这样就使用完成了
2、包含标签 (嵌套标签)
通过渲染另外一个模板展示数据,就是一个嵌套函数,实现展示列表数据
第一步:在teacher_tags.py 文件中新建一个函数如下:
@register.inclusion_tag('teacher/show_list.html')
def show_list(list_data):
return {'ls': list_data}
第二步:在新建一个show_list.html文件,内容如下:
<ul>
{% for L in ls %}
<li> {{ L }} </li>
{% endfor %}
</ul>
第三步:在student_list_page.html中使用:
<td>{% show_list student.hobby %}</td>