• 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页面会加载组件,渲染组件产生的标签
    
  • 相关阅读:
    Eleven-面向对象进阶
    Ten-面向对象
    Nine-常用模块
    Eight-内置函数和匿名函数
    Seven-递归函数和装饰器函数
    Six-迭代器和生成器
    Five-函数
    Four-深浅copy和文件操作
    Third-基础数据类型
    Second-基础
  • 原文地址:https://www.cnblogs.com/luckinlee/p/11622264.html
Copyright © 2020-2023  润新知