自定義模板過濾器及標籤html
1.自定義模板過濾器python
在哪裏定義,代碼寫在哪裏?django
代碼佈局:app
app目錄下的名爲templatetags的文件夾,必須叫這個名字。這個文件夾必須是一個python的包,這個文件夾下必定有一個__init__.py的文件。函數
自定義的模板標籤或模板過濾器就放在這個包下的python模塊中(python腳本文件)。佈局
app必須在settings中被註冊。spa
定義:自定義過濾器就是python函數,它有一個或兩個參數。code
第一個參數就是那個傳進來的模板變量orm
第二個參數是一個普通函數,能夠是默認參數,也能夠不要這個參數。htm
註冊:
#自定義模板過濾器 from django.template import Library register=Library() #必須用register這個變量名 def my_male(value): """ 轉換性別的過濾器 :param value: :return: """ map={ 0:'男', 1:'女' } return map[value] register.filter(my_male)
在模板中使用
1.load標籤,引入自定義的過濾器模塊,也就是templatetags包裏的那個python文件
{% load teacher_filters %}
......
<td>{{student.sex|my_male}}</td>
注意:新建了templatetags文件夾 要重啓一下django服務
2個參數
命名
2.自定義模板標籤:
能夠幹任何事情
標籤類型:
1.簡單標籤:實現更復雜的邏輯,也是個普通的python函數。
django.template.Library.simple_tag()
接收許多參數,返回值是你想要顯示的數據
建立註冊:
from django.template import Library from datetime import datetime register=Library() def current_time(format_str='%Y-%m-%d %H:%M:%S'): #輸出當前時間 return datetime.now().strftime(format_str) #註冊 register.simple_tag(current_time,name='current')
使用:
{% current format_str %} 跟普通函數的傳參數同樣,字符創,模板變量,關鍵字變量
使用上下文變量:
在自定義標籤中,使用當前模板中的上下文變量context
def current_time(context,format_str='%Y-%m-%d %H:%M:%S'): #輸出當前時間 print(context) return datetime.now().strftime(format_str) #註冊 register.simple_tag(current_time,name='current',takes_context=True)
2.包含標籤:
經過渲染另外一個模板展現數據
定義:
#註冊 @register.inclusion_tag('teacher/show_list.html') def show_list(list_data): #一個嵌套標籤,實現展現列表數據 return{'ls':list_data}