django 高階 模板

2021-08-18 01:20:14 字數 3055 閱讀 2439

模板概述

django處理模板分為兩個階段

檢視呼叫模板

呼叫模板分為三步驟:

開啟booktst/views.py檔案,呼叫上面定義的模板檔案

from django.http import httpresponsefrom django.template import loader,requestcontextdef index(request): # 1.獲取模板 template=loader.get_template('booktest/index.html') # 2.定義上下文 context=requestcontext(request,) # 3.渲染模板 return httpresponse(template.render(context))

檢視呼叫模板簡寫

檢視呼叫模板都要執行以上三部分,於是django提供了乙個函式render封裝了以上**。 方法render包含3個引數:

開啟booktst/views.py檔案,呼叫render的**如下:

from django.shortcuts import renderdef index(request): context= return render(request,'booktest/index.html',context)

模板語言

模板語言包括4種型別,分別是:

變數語法如下:

}標籤

語法如下

載入靜態資料夾標籤

反向解析url標籤

for標籤語法如下

迴圈邏輯

}

表示當前是第幾次迴圈,從1開始

列表為空或不存在時執行此邏輯

if標籤語法如下

邏輯1邏輯2邏輯3

比較運算子如下 注意:

運算子左右兩側不能緊挨變數或常量,必須有空格

==!=<><=>=

布林運算子如下

andornot

過濾器

語法如下:

變數|過濾器:引數

常用過濾器

data|default:'預設值'

value|date:"y年m月j日 h時i分s秒"

自定義過濾器

過濾器就是python中的函式,註冊後就可以在模板中當作過濾器使用,下面以求余為例開發乙個自定義過濾器mod。

建立自定義過濾器

在應用中建立templatetags包,當前示例為」booktest/templatetags「,建立init檔案,內容為空。

在」booktest/templatetags「目錄下建立filters.py檔案,**如下:

#引入註冊物件from django.template import libraryregister=library()#使用裝飾器進行註冊@register.filter#定義求餘函式mod,將value對2求餘def mod(value): return value%2

過濾器還可以接收引數,將booktest/templatetags/filters.py中增加mod_num函式

#使用裝飾器進行註冊@register.filter#定義求餘函式mod_num,將value對num求餘def mod_num(value,num): return value%num

注釋

在模板中使用如下模板注釋,這段**不會被編譯,不會輸出到客戶端;html注釋只能注釋html內容,不能注釋模板語言。

單行注釋語法如下:

注釋可以包含任何模版**,有效的或者無效的都可以:

bar #}

多行注釋使用comment標籤,語法如下:

...模板繼承

父模板

預留區域,可以編寫預設內容,也可以沒有預設內容

子模板

標籤extends:繼承,寫在子模板檔案的第一行

#子模版不用填充父模版中的所有預留區域,如果子模版沒有填充,則使用父模版定義的預設值

#填充父模板中指定名稱的預留區域

實際填充內容

}用於獲取父模板中block的內容

html轉義

模板對上下文傳遞的字串進行輸出時,會對以下字元自動轉義,轉義後標記**不會被直接解釋執行,而是被直接呈現,防止客戶端通過嵌入js**攻擊**。

小於號< 轉換為《大於號》 轉換為》單引號' 轉換為'雙引號" 轉換為 "與符號& 轉換為 &

模板預設自動轉義,加safe過濾期則不轉義

不轉義:}

標籤autoescape:off設定一段**都不轉義,on轉義

...csrf

防止csrf攻擊

有csrftoken的網頁原始碼

總結1.當啟用中介軟體並加入csrf標籤後,會向客戶端瀏覽器中寫入一條cookie資訊,這條cookie資訊的值與隱藏的input標籤的value是一致的,提交到伺服器時會先由csrf中介軟體進行驗證,驗證cookie和和input的value是否一致,如果對比失敗則返回403頁面,而不會進行後續的處理

2.重要資訊傳送post請求提交到伺服器

django 模板高階

1.語法 1.1.for迴圈 forloop.counter 從1開始 forloop.counter0 從0開始 forloop.revcounter 倒序到1 forloop.revcounter0 倒序到0 forloop.first 第一次迴圈出的結果為true 其他為flase forlo...

Django 模板高階

模板變數的解析順序 例如 1 首先把book當成乙個字典,把btitle當成鍵名,進行取值book btitle 2 把book當成乙個物件,把btilte當成屬性,進行取值book.btitle 3 把book當成乙個物件,把btitle當成物件的方法,進行取值book.btitle 例如 1 首...

Django 模板高階

這節主要講django 模板中的迴圈,條件判斷,常用的標籤,過濾器的使用 如果需要將乙個或多個變數共享給多個網頁或所有網頁使用,比如在網頁上顯示來訪者 ip 這個用 django 上下文渲染器來做 view.py coding utf 8 from django.shortcuts import r...