我想聽聽你對此的看法。Django過濾器的作用。在視圖中過濾或預先格式化?
我有一個django應用程序,從模型中獲得的數據很粗糙。爲了使它們更好,我必須做一些潛在的複雜操作,但不是太多。 舉個例子,假設你有一個模型,其中美國國家編碼爲兩個字母代碼。在html渲染中,您想要爲用戶呈現完整的狀態名稱。我有另一個數據庫表中的通信雙字母 - >全名。假設我不想執行連接。
我有兩個選擇
- 有視圖代碼提取模型中的兩個字母的信息,然後執行對第二表的查詢,得到的全名,並把它在上下文。模板呈現完整的狀態名稱。
- 創建一個自定義過濾器,它接受雙字母代碼,命中數據庫並返回全長名稱。讓視圖將雙字母信息傳遞到上下文中,並將模板中的管道放入過濾器中。篩選器將雙字母代碼呈現爲完整字符串。
現在,這些解決方案似乎是等同的,但它們不可能,也從設計角度來看。我對在過濾責任和觀點責任之間劃清界限表示懷疑。解決方案1正在完成解決方案2中的過濾器任務,它只是集成在視圖本身中。當然,如果我必須在同一頁面內多次調用過濾器,解決方案1可能會更快(除非過濾器輸出已被記憶)。
對於設計,正確的編碼和性能,您有什麼看法?
雖然我同意這兩個解決方案中的第一個是更好的......我仍然認爲這個模型就屬於這個範疇。該模型不僅僅是數據庫的一個接口。它應該被用來收集和處理數據。 該視圖用於執行業務邏輯,並將alpha-2國家/地區代碼轉換爲全名很難做到業務邏輯......它是數據操作。 – ashchristopher 2010-01-22 04:52:39
這是一個很好的觀點。編輯我的答案。 – 3lectrologos 2010-01-22 06:30:54