自定義過濾器
'''定義一個無參數過濾器'''
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頁面會加載組件,渲染組件產生的標簽