}:顯示變數相關,在模板渲染的時候替換成值
:處理邏輯相關
可以通過點(.)加索引值的方式來取值:
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...