自定义过滤器以及标签

本文介绍如何在Django项目中创建和使用自定义模板过滤器及标签,包括过滤器和标签的定义、注册方法及如何在模板中调用。

自定义过滤器以及标签

自定义模板过滤器

代码布局

  • 创建并放在app目录下的名为templatetags的文件夹下(规定的name),该文件夹必须是一个pthon的包。这个文件夹一定有一个__init__.py文件
  • 自定义模板标签或模板过滤器,就放在这个包下到的python模块中(python文件)
  • app必须再settings中被注册

定义过滤器

  • 自定义过滤器其实就是一个python函数,他有一个或者
    俩个参数
    • 第一个参数是传进来的模板变量
    • 第二个参数就是一个普通参数,可以实默认参数,也可以不要这个参数

注册

#自定义模板过滤器
from django.template import Library

register = Library()#必须用register这个变量名
def my_change_sex(value):
    #转换性别的过滤器
    map = {
        '0': '女',
        '1': '男'
    }
    return map[value]

register.filter(my_change_sex)#代表注册了

在模板中使用

  1. load标签,引入自定义的过滤模块,也就是templatetages包里的python文件。例如:{% load teacher_filters%}
  2. 注意:新建自定义后,要重启服务器

补充:

  • name:可以给函数命名。例如:register.filter(‘aaa',my_change_sex)将函数名改为了aaa,引用的时候使用aaa就OK。
  • 两个参数:
def my_change_sex(value,language='chinese'):
    #转换性别的过滤器
    map = {
       'chinese': {'0': '女', '1': '男'},
       'English': {'0': 'woman', '1': 'man'}
    }
    return map[language][value]

使用修饰器注册:

from django.template import Library

@register.filter(name='change')

def my_change_sex(value,language='chinese'):
    #转换性别的过滤器
    map = {
       'chinese': {'0': '女', '1': '男'},
       'English': {'0': 'woman', '1': 'man'}
    }
    return map[language][value]

自定义模板标签

标签类型

简单标签

  • 接收许多参数
创建,注册

代码布局和过滤器一样

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)#注册

应用方法:{% load name %}

使用修饰器:效果一样

from django.template import  Library
from  datetime import  datetime
register = Library()

@register.simple_tag(name='current',takes_context=True)
def current_time(format_str='%Y-%m-%d %H:%M:%S'):
    return datetime.now().strftime(format_str)
使用上下文变量

使用当前模板中的上下文变量context

from django.template import  Library
from  datetime import  datetime
register = Library()

def current_time(context,format_str='%Y-%m-%d %H:%M:%S'):
    return datetime.now().strftime(format_str)

register.simple_tag(current_time,takes_context=True)#注册

包含标签

通过渲染另外一个模板,来展示数据

定义
def show_list(list_data):
    return {'ls': list_data}

t = get_template('teacher/show_list.html')
register.inclusion_tag(t)(show_list)#注册 

使用装饰器注册:

@register.inclusion_tag('teacher/show_list.html')
def show_list(list_data):
    return {'ls': list_data}

举例:
自定义模板:

from django.template import  Library
from  datetime import  datetime
register = Library()
@register.inclusion_tag('teacher/show_list.html')
def show_list(list_data):
    return {'ls': list_data}

HTML:(修饰)

<ul>
    {% for l in ls %}
        <li>{{ l }}</li>
    {% endfor %}
</ul>

使用:

<td>
    {% show_list student.hobby %}
</td>

效果:
1488523-20190402190806185-1672126879.png

个人心得:
自定义标签的逻辑就是:

  1. 创建自定义模板
  2. html上获取视图def传入参数
  3. 使用自定义模块
  4. 将参数传递到模块中,模块def进行参数处理
  5. 处理后返回修饰后的结果
引用上下文变量

加上takes_context=Ture,同简单标签

转载于:https://www.cnblogs.com/pygive/p/10644677.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值