詳解Django自定義過濾器
django過濾器的本質是函式,但”函式”太多了,為了顯示自己的與眾不同,設計者們想了個名字”過濾器”…
django有一些內建的過濾器,但和”新手賽車”不多(把字母轉成小寫,求陣列長度,從陣列中取一個隨機值),功能很基礎(不夠強大)…
抱著一種”研究琢磨”的心態,試著自己動手寫一個過濾器:功能很簡單,求一個陣列中的最大值(今天太晚了,偷個懶哈~)
功能是很簡單的:
先給出我的一點體會:
在django是MVP的架構,資料模型交給Model,邏輯處理交給View,樣式模板交給temPlate,這是公認的合理架構.
隨著專案規模的增大,會出現一些問題,view掌管了所有的邏輯處理,一些很基礎的邏輯功能(比如求最大值,最小值,給使用者名稱加個字首)是沒必要與核心邏輯放在一起的,不僅讓程式碼顯得冗餘,而且也影響核心模組的迭代維護…
所以django的設計者,決定把一些很基礎通用的邏輯模組單獨取出,放到app目錄下的templatetags
資料夾內(資料夾名字不可改,否則會django會無法識別),templatetags
可以存放多個檔案,每個檔案可以存放多個功能相關的過濾器,使用功能相關的過濾器時,直接匯入單個檔案就可以一併使用相關功能,不愧是django,框架設計真的很贊!
具體使用規則:
1.如果對某個app下的網頁使用過濾器,則在對應app的根目錄下,建立名為templatetags
的資料夾(這裡的pad
為一個獨立的app)
2.在templatetags
資料夾下,新建空檔案__init__.py
(這是python的規矩,__init__.py
表示其所在的資料夾是一個可以載入的模組,__init__
檔案內容可為空),新建檔案zhao_filter.py
(這個檔案可以存放多個過濾器,檔名字可自定義…)
3.在my_filter.py
中,先匯入標頭檔案,編寫過濾器函式(這裡偷個懶,直接用python的內建函式做示範),註冊過濾器(還是喜歡裝飾器);
from django.template import Library
# 將註冊類例項化為register物件
register = Library()
# 使用裝飾器註冊
@register.filter
def get_list_max(val):
# val為一個列表,通過過濾器取得其中的最大值
result = max(val)
return result
4.將過濾器載入到html, 使用自定義的過濾器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>過濾器</title>
</head>
<body>
{# 載入過濾器所在的檔案,由於templatetags的檔名是固定的,django可以直接找到過濾器檔案所在的位置 #}
{% load zhao_fillter %}
{# 顯示列表資料 #}
列表的資料為:{{ my_list }}
<hr>
{# 使用自定義的過濾器get_list_max,獲得列表中最大的值 #}
列表中的最大值為:{{ my_list | get_list_max }}
</body>
</html>
有時候測試伺服器會抽風,找不到過濾器,此時刪除__init__.py
,再重新建立__init__.py
即可!
相關文章
- django2中自定義過濾器Django過濾器
- Django自定義模板標籤與過濾器Django過濾器
- Django5關於 自定義過濾器和標籤Django過濾器
- 4、過濾器的使用及自定義過濾器過濾器
- Python+django網頁設計入門(18):自定義模板過濾器PythonDjango網頁過濾器
- Spring Cloud Gateway---自定義過濾器SpringCloudGateway過濾器
- 13.gateway中的過濾器的介紹以及自定義過濾器Gateway過濾器
- Spring Cloud Gateway自定義Token校驗過濾器SpringCloudGateway過濾器
- spring boot 新增自定義監聽器、過濾器、攔截器Spring Boot過濾器
- Spring Cloud Gateway 實現簡單自定義過濾器SpringCloudGateway過濾器
- Django自定義模型管理器Django模型
- 布隆過濾器(Bloom Filter)詳解過濾器OOMFilter
- HBase Filter 過濾器之 ValueFilter 詳解Filter過濾器
- SpringBoot系列(十二)過濾器配置詳解Spring Boot過濾器
- Filter(過濾器)與Listener(監聽器)詳解Filter過濾器
- mixins,自定義指令,render函式(待研究填坑),過濾器函式過濾器
- Flink去重統計-基於自定義布隆過濾器過濾器
- Django(6)自定義路由轉換器Django路由
- Django 常用的自定義裝飾器Django
- Redis詳解(十三)------ Redis布隆過濾器Redis過濾器
- Django(31)模板中常用的過濾器Django過濾器
- Django4:模板(zhong)—常用過濾器Django過濾器
- Django(69)最好用的過濾器外掛Django-filterDjango過濾器Filter
- 詳解布隆過濾器原理與實現過濾器
- Django(67)drf搜尋過濾和排序過濾Django排序
- 詳解布隆過濾器的原理和實現過濾器
- Spring Cloud Gateway自定義過濾器實戰(觀測斷路器狀態變化)SpringCloudGateway過濾器
- 直播商城原始碼,vue 自定義指令過濾特殊字元原始碼Vue字元
- app直播原始碼,vue 自定義指令過濾特殊字元APP原始碼Vue字元
- 【Spring註解驅動開發】自定義TypeFilter指定@ComponentScan註解的過濾規則SpringFilter
- Vue定義全域性過濾器filterVue過濾器Filter
- 『言善信』Fiddler工具 — 12、Fiddler過濾器(Filters)詳解過濾器Filter
- springboot+zuul(一)------實現自定義過濾器、動態路由、動態負載。Spring BootZuul過濾器路由負載
- 03--元件註冊-自定義TypeFilter指定過濾規則元件Filter
- 直播軟體原始碼,vue 自定義指令過濾特殊字元原始碼Vue字元
- JavaScript自定義滾動條詳解JavaScript
- .Net MVC中定義全域性過濾器及在Action中排除全域性過濾器MVC過濾器
- Django學習——Django settings 原始碼、模板語法之傳值、模板語法之獲取值、模板語法之過濾器、模板語法之標籤、自定義過濾器、標籤、inclusion_tag、模板的匯入、模板的繼承Django原始碼過濾器繼承
- Django(62)自定義認證類Django