Django | 自定義過濾器、標籤、inclusion_tag
阿新 • • 發佈:2022-03-02
自定義過濾器、標籤、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標籤的個數