Django框架自定义标签和过滤器

自定义过滤器

'''定义一个无参数过滤器'''
1:#:在当前的应用中创建一个templatetags的文件夹(必须叫这个名字),然后在文件夹中创建一个python文件,名字随便
2:#在新建的python中引入django模块的template类,然后实例化一个register对象,对象的名字必须是register
    from django import template
    register = template.Library()#register对象名字不可更改
3:#在新建的python中定义过滤器:
    #使用register.filter装饰器装饰函数,就变成一个过滤器,使函数生效
    @register.filter
    def addhello(arg1):
    '''
    :param arg1:arg参数是使用过滤器时管道符前面变量的值
    :return:返回过滤器处理数据的结果
    '''
        return arg1+'你好'
4:#在html文件中使用过滤器
    '''首先引入写着过滤器的这个python文件,会自动在templatetags的文件夹下找这个文件'''
    {% load 文件名 %}#例如:{% load filter %}文件名不用加引号
    '''使用过滤器'''
    {{ name | addhello }}#addhello是自己定义的一个过滤器,然后返回一个新的值填充

'''*******************************************************************'''
'''定义一个有参过滤器'''
#定义有参过滤器就是在函数中增加一个参数,自定义过滤器函数中最多只能有两个参数
@register.filter
def addhello(arg1,arg2):
    '''
    :param arg1: 使用过滤器变量的值
    :param arg2: 传入的参数,就是管道符后面冒号后面的参数,过滤器最多只能有这两个参数
    :return: 返回处理数据后的值
    '''
    return arg1+arg2
#使用示例:
    {{ name | addhello:'你好' }}

自定义标签

#和自定义过滤器一样,在template文件夹中的python中来定义标签,引入方式也相同
@register.simple_tag#register.simple_tag装饰器申明函数是一个自定义标签
def newtag(arg1,arg2):
    '''
    自定义标签没有参数限制,可以是多个参数,但是使用的时候要一一对应
    :param arg1:传入的参数一
    :param arg2:传入的参数二
    :return:返回处理后的数据
    '''
    return arg1+arg2
#引用示例:
    {% newtag name '世界' %}注意格式:标签使用是{% %}的形式
    #第一个参数是要使用的自定义标签的函数名,后面是要传入的参数,函数有几个参数,就传入几个,一一对应

返回HTML片段的标签

##和自定义过滤器一样,在template文件夹中的python中来定义标签,引入方式也相同
#register.inclusion_tag装饰器来申明是一个返回html片段的标签,括号中申明使用的组件
@register.inclusion_tag('index.html')
def res(n1):
    '''
    参数可以随意设置,使用时要一一对应
    标签返回的值必须是字典格式的,键是前端申明的变量名,值就是变量对应的数据
    '''
    return {'li':[11,22,33]}
引用示例:
    {% res %}注意格式:标签使用是{% %}的形式
        
#返回HTML片段标签的执行流程
    '''概念'''
    1:在使用组件的时候,如果组件中有for循环这样的逻辑便签,在加载组件的时候,就会查找这个数据
    2:如果后台没有返回这个数据,就无法获取变量的值,就不会产生数据,这个时候就可以使用返回HTML片段标签,给组件返回一个值
    '''流程'''
    1:在页面加载到返回HTML片段标签的时候,就先去标签中生成一个值,
    2:值不会直接返回给HTMl页面,而是吧值返回给标签关联的组件,去执行逻辑,渲染组件标签
    3:组件标签渲染完成之后,html页面会加载组件,渲染组件产生的标签

猜你喜欢

转载自www.cnblogs.com/luckinlee/p/11622264.html