自定义模板过滤器及标签

自定义模板过滤器及标签html

1.自定义模板过滤器python

  在哪里定义,代码写在哪里?django

代码布局:app

  app目录下的名为templatetags的文件夹,必须叫这个名字。这个文件夹必须是一个python的包,这个文件夹下必定有一个__init__.py的文件。函数

  自定义的模板标签或模板过滤器就放在这个包下的python模块中(python脚本文件)。布局

  app必须在settings中被注册。spa

定义:自定义过滤器就是python函数,它有一个或两个参数。code

  第一个参数就是那个传进来的模板变量orm

  第二个参数是一个普通函数,能够是默认参数,也能够不要这个参数。htm

注册:

#自定义模板过滤器
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}
相关文章
相关标签/搜索