天天看點

Django架構學習(二)一. MVC架構和MTV架構二. Django模闆系統

内容來源于【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>
           

結果

Django架構學習(二)一. MVC架構和MTV架構二. Django模闆系統

注:當模闆系統遇到’(.)'時,會按照如下順序進行查詢

  1. 在字典中查詢
  2. 屬性或者方法
  3. 數字索引

(三)Filters過濾器

過濾器用來修改變量的顯示結果

文法:{{變量1|過濾器1:參數},{變量2|過濾器2:參數},{變量2|過濾器3:參數}},參數是可選的,最多一個參數

注:’:'左右沒有空格

  1. default過濾器,變量不存在或者為空時使用

    {value|defalut:‘nothing’},如果value變量沒有傳值的話就顯示預設的‘nothing’字元串。

    如在模闆檔案中寫{{變量}},該變量未在views中定義,則在頁面中什麼都不顯示,若使用defalut過濾器{{變量|defalut:‘預設值’}},則在頁面中顯示預設值。

  2. filesizeformat過濾器将數字轉化為一個“人類可讀的”檔案尺寸,{例如‘13KB’,‘4.1MB’等}

    例如:在views中定義變量’filesize’:1024,在模闆中直接渲染{{filesize}}變量,在頁面中顯示數字1024,在渲染時加filesizeformat過濾器即{{filesize|filesizeformat}},在頁面中顯示1KB(為檔案的大小)

  3. add過濾器,加法或者字元串,清單等拼接的作用

    {{4|add:2}}結果為6

    {{4|add:-2}}結果為2,在參數前面加-号即為減法

    {{‘hello’|add:‘world’}}結果為helloworld。

  4. lower過濾器,小寫

    {{value|lower}}

  5. upper過濾器,大寫

    {{value|upper}}

  6. title過濾器,标題

    {{value|title}}

  7. ljust過濾器,左對齊

    {{value|ljust}}

  8. rjust過濾器,右對齊

    {{value|rjust}}

  9. length過濾器,傳回value的長度

    {{value|length}} 若value為[1,2,3,4],結果為4

  10. slice過濾器,切片

    {{value|slice:'0:2’}}取value值的索引為0和1的元素,引号中的寫法和python中的文法一緻

  11. first過濾器,取第一個元素,last過濾器取最後一個元素
  12. join過濾器,使用字元拼接清單,通python的str.join(list)

    {{value|join:’’}},将value(list類型)中的元素用‘’連接配接起來

  13. truncatechars過濾器,如果字元串字元多餘指定的字元數量,則被截斷,階段的字元串将以可翻譯的省略号“……”結尾,參數為截斷的字元數,truncatewords以單詞為機關進行截斷,或者以空格進行截斷。
  14. 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|}

(四)自定義過濾器

  1. 在app下建立一個名為templatetags的python包
  2. 在templatetags中建立一個python檔案,檔案名可自定義(mytags.py)
  3. 在自定義的檔案中導入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)
           
  1. 加載過濾器和使用自定義過濾器
{% load mytags  %}<!--導入過濾器-->
{{ rongmei.name|add_arg:'tanqi' }}<!--在模闆中使用自定義過濾器-->