自定义模板过滤器
代码布局(死记硬背)
在哪里定义?要将代码写在什么地方?
-
app必须在settings中被注册
-
app目录下名为
templatetags
, 的文件夹,必须叫这个名字。这个文件夹必须是一个python的包,这个文件夹下一定要有一个__init__.py
的文件。 -
自定义的模板标签,或模板过滤器就放在这个包下的python模块中(python脚本文件)。
定义
- 自定义过滤器就是一个python函数,它有一个或2个参数。
- 第一个参数 就是那个传进来的模板变量(任意数据类型)
- 第二个参数是一个普通参数,可以是默认参数,也可以不要这个参数
注册
注册到django框架中才能使用
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)
在模板中使用
load标签,引入自定义的过滤器模块,也就是 templatetags
包里的那个python文件
{% load teacher_filters %}
......
<td>{{ student.sex|my_male }}</td>
注意:新建了templatetags文件夹 要重启一下django服务
两个参数
命名
自定义模板标签
标签类型
一. 简单标签*
django.template.Libray.simple_tag
由simple_tag的实例来注册(simple_tag())
- 接受许多参数
创建
from django.template import Library
from datetime import datetime
register = Library()
def text_1(format_str='%Y%m%d %H:%M:%S' ):
return datetime.now().strftime(format_str)
#注册
register.simple_tag(text_1(), name='text')
使用
{% load teacher_tags %}
{% text format_str %} # 跟普通函数的传参数一样,字符串,模板变量,关键字参数
使用上下文变量
在自定义标签中,使用当前模板中的上下文变量 context
from django.template import Library
from datetime import datetime
register = Library()
def text_1(context, format_str='%Y-%m-%d %H:%M:%S' ):
return datetime.now().strftime(format_str)
#注册
register.simple_tag(text_1, name='text', takes_context=True)
二. 包含标签
通过另外一个模板展示数据
定义
# 注册
@register.inclusion_tag('teacher/show.html')
def show_list(list_data):
# 一个嵌套标签,实现展示列表数据
return {'ls': list_data}
引用上下文变量
装饰器