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頁面會加載組件,渲染組件產生的標簽


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM