自定義過濾器,標籤,inclusion_tag
阿新 • • 發佈:2022-03-03
自定義過濾器,標籤,inclusion_tag
自定義過濾器,形參做多兩個
三個必須
- 在應用下建立一個名字"必須"叫
templatetags
資料夾 - 在該資料夾內建立"任意"名稱的py檔案 如 : mytag.py
- 在該py檔案內"必須"先書寫以下兩句話(一個子都不能錯)
from django import template
register = template.Library()
現在開始自定義過濾器
# 後端 @register.filter(name='baby') def my_sum(v1, v2): return v1 + v2 # 前端 {% load mytag %} <p>{{ n|baby:666 }}</p>
自定義標籤(引數可以有多個) 類似於自定義函式
@register.simple_tag(name='plus')
def index(a,b,c,d):
return '%s-%s-%s-%s'%(a,b,c,d)
# 使用
標籤多個引數彼此之間空格隔開
<p>{% plus 'jason' 123 123 123 %}</p>
# 輸出
jason-123-123-123
inclusion_tag
內部原理:現在views.py定義一個方法,再定一個頁面並呼叫方法,並且可以傳值,該方法會生成一些資料然後傳遞給html頁面,再將渲染好的結果放到呼叫的位置。
@register.inclusion_tag('lift.html')
def left(n):
data = ['第{}項'.format(i) for i in range(n)] # 列表生成式
# 將data傳遞給'lift.html'
# 第一種方式
return {'data':data}
# 第二種方式
return locals()
<ul> {% for datum in data %} <!--for 迴圈列表--> <li>{{ datum }}</li> <!--新增到li標籤內--> {% endfor %} </ul>
<body>
{% load mytag %}
{% left 10 %}
</body>
當HTML頁面某一個地方需要傳引數才能夠動態的渲染,並且在多個頁面上都需要使用到該區域性,就可考慮該區域性頁面改為inclusion_tag