djano-模板層基礎知識
阿新 • • 發佈:2018-11-09
########模板層######## 模板層其實就是templates資料夾裡的html檔案 其實這裡的每個html不是真正意義的上html程式碼,只有經過模板渲染過後才算的上真正的html頁面。 一、模板語言(變數,深度查詢,過濾器,標籤) 1、變數 在django模板裡通過{{ name }} 表示一個變數,name就是一個變數名 首先我們要明白這個變數是怎麼傳出來的, 在檢視層: return render(request,'index.html',local()) #local()就把當前檢視函式的變數全部傳到index.html模板中,這樣就不要我們寫太多程式碼了,但是#也有缺點,就是把一些不需要渲染的變數也傳了過去。 模板層: 當程式讀到{{開頭,一直讀到}}結尾,這裡會有一個變數值,就會去名稱空間裡找相應的變數。這其實 和我們之前寫socket寫服務端一樣的,讀取檔案,再用相應的變數去替換掉符合條件的字串。 好了好了,說說變數吧,記住一點就行:{{name}} ----> 相當於在python中執行了print(name)操作 你記住這個就行了!!!,這就是精髓。下面我就寫寫虛擬碼吧, name = 'zhuyu' #檢視層定義的變數 {{ name }} #在前臺頁面顯示 zhuyu 後面我就不寫註釋了 list = [1,2,3,['hello','word']] {{ list }} ---------> [1,2,3,['hello','word']] def run(): return 'run go' {{ run }} ---------> 'run go' #這裡我說下,在python中我們列印print(run),顯示的函式的記憶體地址, #會出現'run go',只能說明模板中執行函式,列印了它的返回值。zhuyu = User('zhuyu',19) #這裡是User是一個類 {{ zhuyu }} --------> '<app01.views.index.<locals>.People object at 0x0000028D4DDDB240> ' #你在python中,列印一個物件,執行__str__,他的返回值就上面這個,所以說,看下面 {{zhuyu.get_name}} -----> 'zhuyu ' #這是呼叫物件的方法,也是執行方法,列印的是它的返回值 總結:1、{{ 變數名 }} 其實就是執行print操作 2、假如該變數是一個函式,或者物件的函式屬性,就是幫你執行,列印執行後的返回值 3、不能列印帶引數的函式,方法,這裡要小心!!!! 2、過濾器 {{ 'name'|length }} 這是一個引數的過濾器 {{ 'zhu'|add:'yu' }} 這是兩個引數的過濾器 總結:|前是第一個引數,後面就是過濾器,冒號(:)就是第二個引數, 記住只能傳兩個引數,如果你想傳多個引數的話,你可以為第二個引數寫上指定的格式比如('a:b:c'),然後拿到該引數,也是就一個字串,進行split(':')操作,這樣你就拿到一個列表了,相當於你第二個引數傳了三個引數,對不對。其實方法有很多的,看你自己怎麼寫了。 3、標籤 {% %} ------> 表示一個標籤,他是和變數、過濾器是有差距的,看也看得出來。 for迴圈: {%for foo in foos%} {% endfor %} if判斷: {% if %} {% endif %} with(相當於給一個複雜的變數名賦別名): {% with asdasdasdsa as as%} {% endwith %} 總結:1、這些不都不用多說了,學過python,這些再清楚不過了,記住它的語法規定就行了,for迴圈,if判斷,with都和python差不多。對了,for迴圈裡有一個對 象,forlorp,是不在記不住你就在迴圈裡列印看看是什麼就好了 2、哦哦,還有不是if判斷,它判斷的條件可以是過濾器,過濾器就是判斷它的返回值嘛,但不可以是標籤,沒有為什麼。 4、自定義過濾器,標籤 (1)、首先在app檔案中新建一個資料夾(包),名字必須為templatetags (2)、在該資料夾中新建py檔案,名字隨便你取:例如tags.py (3)、在py檔案中匯入模組,並且例項化一個物件,名字必須為register from django.template import library register = library() (4)、繼續在該檔案中寫的函式,過濾器,標籤其本質也是一個函式,但是你寫的函式必須要有裝飾器,這樣才能成為過濾器,標籤。 @register.filler(name='add') #這樣寫這個函式才是一個過濾器,對就是過濾器,name='add',給過濾器命名 def my_add(value1,value2): return value1+value2 @register.tag('add1') #這樣寫該函式才是標籤,就是在上面加裝飾器 def add_str(value1,value2,value3): return value1+value2+value3 (5)、上面的步驟,我們只是註冊了過濾器,標籤,想要使用的話,必須要在模板中匯入 {% load tags %} #這裡的tags就是你新建的py檔案 {{ 'zhuyu'|add:'nb' }} #這裡add就是我之前自定義的過濾器,不要在add 名字和已有的模板標籤重名說到重名,我現在有個想法,它到底是執行django自帶的過濾器,還是我定義的呢?這肯定是由先後的,自己去試試。 {% add1 'zhuyu' 'nb' '!'%} #這裡這個add1標籤必須傳多個引數,用空格去區別。 5、對了差點忘了深度查詢 對於列表,字典在python中我們是怎麼去取值的呢? name = ['zhuyu','zhanghao','daisongbai','wuyang','yangpeng'] info_dic = {'name':''zhuyu,'age':21} 取列表的第二個元素: name[1] 取字典key為name: info_dic[name] 但是在模板中,是沒有[]的,那麼我們該怎麼去取呢? 我們同一使用.,千萬別看漏了小數點,我們用.去取值 取列表的第三個元素: name.3 #這是在模板中記住 取字典的key為age: info_dic.age 深度查詢其實很簡單,你可以一直.下去。 今天就更新結束,哈哈,我只是通過講話的方式,來記錄一些知識點。