自定义模板过滤器及标签

自定义模板过滤器

代码布局(死记硬背)

在哪里定义?要将代码写在什么地方?

  • app必须在settings中被注册

  • app目录下名为 templatetags, 的文件夹,必须叫这个名字。这个文件夹必须是一个python的包,这个文件夹下一定要有一个 __init__.py 的文件。自定义模板过滤器及标签_第1张图片自定义模板过滤器及标签_第2张图片

  • 自定义的模板标签,或模板过滤器就放在这个包下的python模块中(python脚本文件)。自定义模板过滤器及标签_第3张图片

定义

  • 自定义过滤器就是一个python函数,它有一个或2个参数。
  • 第一个参数 就是那个传进来的模板变量(任意数据类型)
  • 第二个参数是一个普通参数,可以是默认参数,也可以不要这个参数自定义模板过滤器及标签_第4张图片
    自定义模板过滤器及标签_第5张图片
    注册
    注册到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)


自定义模板过滤器及标签_第6张图片

在模板中使用

load标签,引入自定义的过滤器模块,也就是 templatetags 包里的那个python文件

{% load teacher_filters %}

......
<td>{{ student.sex|my_male }}</td>

自定义模板过滤器及标签_第7张图片自定义模板过滤器及标签_第8张图片

注意:新建了templatetags文件夹 要重启一下django服务

两个参数
自定义模板过滤器及标签_第9张图片
自定义模板过滤器及标签_第10张图片自定义模板过滤器及标签_第11张图片

命名
自定义模板过滤器及标签_第12张图片自定义模板过滤器及标签_第13张图片自定义模板过滤器及标签_第14张图片

自定义模板标签

标签类型

一. 简单标签*

django.template.Libray.simple_tag
由simple_tag的实例来注册(simple_tag())

  • 接受许多参数

创建
自定义模板过滤器及标签_第15张图片
自定义模板过滤器及标签_第16张图片


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')

使用
自定义模板过滤器及标签_第17张图片
自定义模板过滤器及标签_第18张图片
自定义模板过滤器及标签_第19张图片自定义模板过滤器及标签_第20张图片自定义模板过滤器及标签_第21张图片自定义模板过滤器及标签_第22张图片自定义模板过滤器及标签_第23张图片

{% load teacher_tags %}

{% text format_str %}  # 跟普通函数的传参数一样,字符串,模板变量,关键字参数

使用上下文变量

在自定义标签中,使用当前模板中的上下文变量 context
自定义模板过滤器及标签_第24张图片


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)

二. 包含标签
通过另外一个模板展示数据

定义
自定义模板过滤器及标签_第25张图片自定义模板过滤器及标签_第26张图片自定义模板过滤器及标签_第27张图片自定义模板过滤器及标签_第28张图片


# 注册
@register.inclusion_tag('teacher/show.html')
def show_list(list_data):
    # 一个嵌套标签,实现展示列表数据
    return {'ls': list_data}
    

引用上下文变量

自定义模板过滤器及标签_第29张图片

装饰器

自定义模板过滤器及标签_第30张图片
自定义模板过滤器及标签_第31张图片

你可能感兴趣的:(django框架学习)