django 模板相關

2022-09-12 22:30:38 字數 3779 閱讀 7452

}:顯示變數相關,在模板渲染的時候替換成值

:處理邏輯相關

可以通過點(.)加索引值的方式來取值:

i.0  <====> 就是python語法中的 i[0]

i.name <====> 就是python語法中的 i[ "name" ]

i.keys <====> 就是python語法中的 i.keys()

i.items <====> 就是python語法中的 i.items()

通過點取值的優先順序(從高到低排序):

在字典中查詢 ,點後面的名稱,會優先從字典的鍵值中匹配

屬性或者方法, 其次去匹配類的屬性或者方法

數字索引,最後才會去匹配數字索引

優先匹配到什麼就是什麼

1、for迴圈標籤

中間做邏輯處理/顯示相應的資料

只要使用到for迴圈,每個for迴圈過程中,都有乙個共同的屬性: forloop

forloop是乙個字典,裡面儲存的資料如下:

, 'counter0': 0, 'counter': 1, 'revcounter': 6, 'revcounter0': 5, 'first': true, 'last': false}

通過forloop能夠獲取到for迴圈執行到某個輪次時的一些資料:

forloop.counter : 取得當前輪次的序號(從1開始)

forloop.counter0 :取得當前輪次的序號(從0開始) 

forloop.revcounter : 取得當前輪次的序號(倒序,到1終止)

forloop.revcounter0 : 取得當前輪次的序號(倒序,到0終止)

forloop.first : 當前迴圈是否是第一輪次(布林值,true or false)

forloop.last : 當前迴圈是否是最後一輪次(布林值,true or false)

forloop.parentloop :如果當前迴圈外層還有乙個迴圈,那麼就能獲取到此時的外層迴圈的forloop資料;

如果當前迴圈沒有巢狀迴圈,那麼該值就是空字典

2、只能和for迴圈標籤一起用,和if標籤一起用報錯

用途:當for迴圈物件為空時(可能是檢視函式傳值問題,或者是處理後的值本身為空),顯示後的資料

}無資訊

只有 l 的值為空 : 空字串、空列表、空字典、空集合等。特殊地,l為none時也能夠觸發for迴圈內的empty(親自測試過,none不是不可迭代的嗎...)

只要l的有乙個值,即便是字串中的空格(" ")、列表中的空字串[ "" ]等,都不會觸發empty顯示後續資料。

3、if判斷標籤

模板語言中,if支援的邏輯判斷:

not、and、or、==、>、<、>=、<=、!=、in、not in、is、is not

不支援運算操作,如。想在判斷過程使用運算操作,可以使用filter(過濾器,add)

不支援連續判斷。

python中的連續判斷:   10 > 5 > 2      結果為true

判斷過程為:

1、 10 > 5 為true

2、 5 > 2 為true

3、將兩次判斷的過程做and運算,即true  and  true,最終結果為true

模板語言中的連續判斷: 10 > 5 > 2  結果為false

判斷過程為:

1、 10 > 5 為true, 對應的值就是1

2、  1 > 2 為false,最終結果為false

和js一樣,模板語言是不支援類似python的連續判斷機制。

4、with起別名,為後續使用提供便利

第一種寫法:

後續需要使用obj.name的話,可以直接用name替代

}  <====>   }

第二種寫法:

1、基本語法

}過濾器和引數直接的冒號,左右兩邊不能有空格!!

2、django內建的一些過濾器

default:當資料為空時,顯示default引數內的值。(資料為布林值false時,也會觸發default過濾器;為true時,正常顯示true)

add:陣列加法/減法(將add的值改為負數即可)

字串的數字加減,最終也會顯示數字。如}顯示6

還可以做字串拼接和列表拼接操作。如}顯示abcd,}顯示[1,2,3,4]

列表拼接,必須是從檢視函式中,傳值過來的兩個列表來做, }這種形式無法呼叫add

upper/lower/title:字母大寫/小寫/首字母大寫(該過濾器不需要引數)

length:取得當前資料的長度(不需要引數)

date:將日期資料格式化顯示(格式化模板和python有不同之處)

}    "y-m-d h:i:s" 表示年月日時分秒

python中的字串格式化為   %y-%m-%d %h:%m:%s

過濾器可以連用,如}最終顯示abc

更多的內建過濾器用法可以在官方手冊中檢視 

3、自定義過濾器

過濾器最多只能有兩個引數,第乙個引數是當前需要處理的值,第二個引數是處理第乙個引數所需要的值

過濾器可以只有第乙個引數(如upper、lower、title)

自定義過濾器的步驟:

2、在該包下建立乙個python檔案,檔名自定義(如mytags);

3、在該檔案中先寫上

from django import template

register = template.library()

4、接著寫上自定義的過濾器函式,並為其加上裝飾器(@register.filter)

其中,templatetags和register不能寫錯!否則django識別不了自定義的過濾器

自定義過濾器的使用:

1、在需要用到自定義過濾器的模板檔案中,引入自定義過濾器函式所在的python檔案

如2、使用過濾器語法,呼叫過濾器  }

注意:如果自定義過濾器是在django啟動的情況下加入的,需要重啟django伺服器才能生效。

1、模板的繼承

模板檔案必須用引號包裹,否則會被當成變數處理

通常,將多個頁面都會用到的公共部分放到乙個檔案中(母版),子檔案在繼承母版後,如果後續需要修改公共部分的元素,只需修改母版即可。

2、塊每個繼承母版的子頁面中,不可能每個地方都和母版一致,這就需要在母版中,用block的方式將後續其他頁面可能需要修改的地方標記起來;

在子頁面中,只需修改相應的塊的內容,就能夠實現將母版中對應的內容替換掉。

3、一般情況下,模板的繼承語句放在模板檔案的第一行。

這樣的話,子頁面中要展示的內容,就必須寫在相應的block中,否則無法顯示。

除非,將要展示的內容,放在模板的繼承語句之前。

4、對於css、js需要將其標記在block中,以免子頁面在繼承母版的時候,繼承到不必要的css和js

5、元件

把乙個頁面公用的部分單獨寫入乙個檔案,如導航欄。

然後在需要用到的模板檔案中,通過引入語句匯入到檔案中即可

元件和母版:

母版將所有頁面共用的部分集合在一起。

元件將單個公共部分抽離到乙個檔案,避免有些頁面只需要某個單獨部分,而不想繼承母版的全部的內容。

在django的settings中,static_url表示靜態資源的引用。

每個靜態檔案的路徑前必須有static_url作為字首。

如果將靜態檔案的路徑寫死,那麼後續修改static_url值的話,需要將每個靜態檔案的路徑修改一遍,極其繁瑣。

所以,可以通過模板語言來動態獲取static_url的值,實現修改該值後,每個靜態檔案的路徑都自動匹配上該值

動態獲取的步驟:

先引入方式1:

方式2:

Django教程 Django模板

如何向請求者返回乙個漂亮的頁面呢?肯定需要用到html css,如果想要更炫的效果還要加入js,問題來了,這麼一堆字串全都寫到檢視中,作為httpresponse 的引數嗎?先看看如何拼接html 圖書首頁 if request.method get res html books 射鵰英雄傳 神鵰俠...

Django模板例子

使用django開發第乙個render例子。首先準備python開發環境然後建立相應的專案 1 django admin.py startproject hello 3 設定django的template路徑,在hello目錄下的setting.py中設定 template dirs f hello...

Django 模板使用

環境 python 2.7 32位,django1.6.7,win7 64位系統 模板載入 在mysite下新建乙個templates資料夾,然後在setting.py新增以下內容 import os.path template dirs os.path.join os.path.dirname f...