自定义过滤器 '''定义一个无参数过滤器'''1:#:在当前的应用中创建一个templatetags的文件夹(必须叫这个名字),然后在文件夹中创建一个python文件,名字随便2:#在新建的python中引入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页面会加载组件,渲染组件产生的标签