1. 程式人生 > 其它 >自定義過濾器,標籤,inclusion_tag

自定義過濾器,標籤,inclusion_tag

自定義過濾器,標籤,inclusion_tag

自定義過濾器,形參做多兩個

三個必須

  1. 在應用下建立一個名字"必須"叫templatetags資料夾
  2. 在該資料夾內建立"任意"名稱的py檔案 如 : mytag.py
  3. 在該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