1. 程式人生 > 實用技巧 >轉:django自定義標籤和過濾器

轉: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頁面會載入元件,渲染元件產生的標籤