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

Django | 自定義過濾器、標籤、inclusion_tag

自定義過濾器、標籤、inclusion_tag

自定義之前注意事項:

1. 在應用下建立一個名字'必須'為templatetags資料夾
2. 在該資料夾內建立'任意'名稱的py檔案 比如:mytag.py
3. 在該py檔案內'必須'編寫下面兩句話
    from django import template
    register = templante.Library()
# 注:變數名也不能改變

自定義過濾器:

# 關鍵字:@register.filter(name='自定義名字')

eg:
# 自定義過濾器:
from django import template


register = template.Library()

@register.filter(name='mysum')  
def my_sum(v1,v2):
    return v1+v2


# 使用
{% load mytag %}  # 匯入檔案

<p>{{ n|mysum:s }}</p>   # 字串拼接
<p>{{ i|mysum:222 }}</p>   # 數字相加

自定義標籤

# 自定義標籤
@register.simple_tag(name='plus')
def index(a,b,c,d):
    return '%s-%s-%s-%s'%(a,b,c,d)

# 具體使用
{% load mytag %}
<p>{% plus 'gary' 28 'age' 20 %}</p>

自定義inclusion_tag

# 內部原理
	先定義一個方法 
	在頁面上呼叫該方法 並且可以傳值
	該方法會生成一些資料然後傳遞給一個html頁面
	之後將渲染好的結果放到呼叫的位置
# 自定義inclusion_tag

@register.inclusion_tag('left_menu.html')
def left(n):
    data = ['標籤{}'.format(i) for i in range(n)]  # 列表生成式
    # 將data傳遞給'left_menu.html'
    # 第一種方式:
    # return {'data':data}
    # 第二種方式:
    return locals()
# left_menu.html

<ul>
    {% for foo in data %}   # for迴圈data列表
        <li>{{ foo }}</li>   # 新增到li標籤內
    {% endfor %}
</ul>
# 使用
{% load mytag %}   # 匯入檔案

{% left 10 %}    # 引數可指定li標籤的個數