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

Posted luckinlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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页面会加载组件,渲染组件产生的标签

以上是关于Django框架自定义标签和过滤器的主要内容,如果未能解决你的问题,请参考以下文章

django自定义模板标签和过滤器

Django(自定义过滤器和自定义标签)

Django—— 模板层:变量过滤器标签自定义标签和过滤器

Django入门--自定义过滤器与标签

Django之自定义标签,过滤器,以及inclusion_tag

Django 自定义过滤器和模板标签