内容來源于【2020 最新python教程】第五部分:Django架構課程教學筆記和maple-shaw部落格筆記
一. MVC架構和MTV架構
該部分内容轉載自aaronthon
(一)MVC:
M:model模型,操作資料庫;
V:view視圖,展示資料;
C:contriller控制器,流程業務邏輯
(二)MTV:
M:model模型,ORM(對象關系管理器);
T:template模闆;
V:view視圖,業務邏輯
二. Django模闆系統
Django模闆中的{{***}}和{{%*** %}}符号{{***}}表示變量,在模闆渲染的時候替換成對應的值,如從view中傳入template的值。{{%*** %}}表示邏輯相關的操作,圖在template中的for标簽,if标簽等。
(一) 變量
變量名由字母數字和下劃線組成,不能以數字開頭
(二) 模闆文法
模闆測試用例
#在urls.py檔案中加入
path('template_test/', views.template_test),
#在views.py 中定義template_test方法
def template_test(request):
num=1
string='happy every day'
name_list=['rongmei','meizi']
dic={'name':'rongmei','age':24}
tup=('rongmei','meizi')
name_set={'rongmei','meizi'}
class Person:#定義類
def __init__(self,name,age):
self.name=name
self.age=age
def talk(self):
return '今天霧霾比較嚴重'
def __str__(self):
return('<Person object {}:{}>'.format(self.name,self.age))
rongmei=Person('rongmei',24)#實力化對象
return render(request,'template_test.html',
{
'num':num,
'string':string,
'name_list':name_list,
'dic':dic,
'tup':tup,
'name_set':name_set,
'rongmei':rongmei
})
#在模闆中渲染
<body>
{{ num }}
<br>
{{ string }}
<br>
{{ name_list.0 }}<!--用‘.’+索引代替python中的[索引]進行索引-->
<br>
{{ dic }}<!--模闆中調用方法不需要加'()',如dic.keys,dic.items-->
<br>
{{ tup }}
<br>
{{ name_sey }}
<br>
{{ rongmei.talk }}<!--隻能執行不帶參數的方法-->
<br>
</body>
結果
注:當模闆系統遇到’(.)'時,會按照如下順序進行查詢
- 在字典中查詢
- 屬性或者方法
- 數字索引
(三)Filters過濾器
過濾器用來修改變量的顯示結果
文法:{{變量1|過濾器1:參數},{變量2|過濾器2:參數},{變量2|過濾器3:參數}},參數是可選的,最多一個參數
注:’:'左右沒有空格
-
default過濾器,變量不存在或者為空時使用
{value|defalut:‘nothing’},如果value變量沒有傳值的話就顯示預設的‘nothing’字元串。
如在模闆檔案中寫{{變量}},該變量未在views中定義,則在頁面中什麼都不顯示,若使用defalut過濾器{{變量|defalut:‘預設值’}},則在頁面中顯示預設值。
-
filesizeformat過濾器将數字轉化為一個“人類可讀的”檔案尺寸,{例如‘13KB’,‘4.1MB’等}
例如:在views中定義變量’filesize’:1024,在模闆中直接渲染{{filesize}}變量,在頁面中顯示數字1024,在渲染時加filesizeformat過濾器即{{filesize|filesizeformat}},在頁面中顯示1KB(為檔案的大小)
-
add過濾器,加法或者字元串,清單等拼接的作用
{{4|add:2}}結果為6
{{4|add:-2}}結果為2,在參數前面加-号即為減法
{{‘hello’|add:‘world’}}結果為helloworld。
-
lower過濾器,小寫
{{value|lower}}
-
upper過濾器,大寫
{{value|upper}}
-
title過濾器,标題
{{value|title}}
-
ljust過濾器,左對齊
{{value|ljust}}
-
rjust過濾器,右對齊
{{value|rjust}}
-
length過濾器,傳回value的長度
{{value|length}} 若value為[1,2,3,4],結果為4
-
slice過濾器,切片
{{value|slice:'0:2’}}取value值的索引為0和1的元素,引号中的寫法和python中的文法一緻
- first過濾器,取第一個元素,last過濾器取最後一個元素
-
join過濾器,使用字元拼接清單,通python的str.join(list)
{{value|join:’’}},将value(list類型)中的元素用‘’連接配接起來
- truncatechars過濾器,如果字元串字元多餘指定的字元數量,則被截斷,階段的字元串将以可翻譯的省略号“……”結尾,參數為截斷的字元數,truncatewords以單詞為機關進行截斷,或者以空格進行截斷。
-
date過濾器,日期格式化,用的稍微多一點
{value|date:‘Y-m-d H:i:s’},在python中格式化年月日為%Y-%m-%d,時分秒為%H:%M:%S,與Django中稍有不同,需要注意
import datetine
now=datetime.datetime.now()#擷取目前時間
或者在settings中将USE_LION改為false,然後将時間的格式設定為DATETIME_FORMAT='Y-m-d H:i:s’也能達到上述效果
DATE_FORMAT=‘Y-m-d H:i:s’#僅date類型
TIME_FORMAT=‘Y-m-d H:i:s’#僅time類型
15. safe過濾器,告訴Django這段代碼是安全的,不必進行轉義,即不對HTML标簽和JS等文法進行自動轉義,如:
{value|}
(四)自定義過濾器
- 在app下建立一個名為templatetags的python包
- 在templatetags中建立一個python檔案,檔案名可自定義(mytags.py)
- 在自定義的檔案中導入template模闆和寫register=template.Library()語句,此步驟為固定寫法
from django import template
register=template.Library()#此處的()不能少
注:上述步驟中,包的名字templatetags不能錯,且register變量名字也不能錯
4. 寫函數+裝飾器
@register.filter#注冊過濾器
def add_arg(value,arg):#自定義過濾器最多兩個參數,value為過濾器變量
#功能,字元串拼接
return "{}_{}".format(value,arg)
- 加載過濾器和使用自定義過濾器
{% load mytags %}<!--導入過濾器-->
{{ rongmei.name|add_arg:'tanqi' }}<!--在模闆中使用自定義過濾器-->