自定义模板过滤器及标签

自定义模板过滤器及标签

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}

 

  

 

posted @ 2019-03-27 01:08  jonney_2019  阅读(112)  评论(0编辑  收藏  举报