第六章 深入模板

2021-10-25 03:48:29 字數 3925 閱讀 7969

django內建的模板引擎包含模板上下文(模板變數),標籤,過濾器

模板上下文(模板變數):變數值有檢視函式或檢視類傳遞所得

標籤:對變數進行控制輸出,例如判斷和迴圈控制等

過濾器:多變數進行操作處理。

}

#variable1='字串或整型'

#variable2=

#variable3=['元組或列表']}}

#屬性}

#索引

django內建模板標籤:

:判斷標籤,對上下文進行條件判斷

:迴圈標籤,遍歷輸出上下文的內容

防跨站請求偽造攻擊

:將上下文重寫命名

:載入匯入django標籤庫

:讀取靜態資源的檔案內容

:繼承***模板

:重寫父類模板的**

#for 標籤

}#if 標籤}}

}#url 標籤

#生成不帶變數的url位址

"">首頁<

/a>

#生成帶變數的url位址

"">第一頁<

/a>

#with 標籤

}#load 標籤

#匯入靜態檔案標籤庫staticfiles

#static 標籤

#來自靜態檔案標籤庫staticfiles

forloop物件的使用

這是第一次迴圈<

/span>

這是最後一次迴圈<

/span>

本次迴圈次數為:

}<

/span>

自定義模板標籤:

(1)在專案根目錄下建立新的資料夾(mydefined)

(2)在該資料夾下建立初始化檔案__init__.py和templatetags資料夾。必須以templatetags命名

(3)在templatetags資料夾下建立初始化檔案__init__.py和自定義標籤檔案mytag.py

......

'django.contrib.staticfiles',

'index',

'mydefined',]

(5)在專案mytag.py檔案裡自定義標籤(reversal)

(6)在模板檔案中使用自定義標籤

#匯入自定義標籤檔案mytags

#頁面顯示ognajd

通過模板標籤實現,將多個模板檔案的共同**集中在乙個新的模板檔案中,在各個模板中呼叫該模板

使用:(1)在tempaltes 資料夾建立base.html檔案,作為公用模板

(2)在其他模板中呼叫

#宣告呼叫公用模板

首頁

}

過濾器支援多個過濾器同時使用

過濾器支援傳入引數,過濾器與引數用冒號隔開但不能有空格

}
自定義過濾器:

(1)在專案根目錄下建立新的資料夾(mydefined)

(2)在該資料夾下建立初始化檔案__init__.py和templatetags資料夾。必須以templatetags命名

(3)在templatetags資料夾下建立初始化檔案__init__.py和自定義過濾器檔案myfilter.py

......

'django.contrib.staticfiles',

'index',

'mydefined',]

(5)在專案myfilter.py檔案裡自定義過濾器(replace)

(6)在模板檔案中使用自定義過濾器

#匯入自定義過濾器檔案myfilter

替換前:}

替換後:}

頁面顯示將python替換為django

安裝

pip install jinja2
校驗(python互動式命令列)

import jinja2

jinja2.version

配置:(1)在專案資料夾新建jinja2.py檔案。(與settings.py在同級目錄下)

(2)在jinja2檔案中定義函式environment,並在函式裡使用jinja2的類environment進行例項化,例項化物件env用於對接django的執行環境

#jinja2.py

from django.contrib.staticfiles.storage import staticfiles_storage

from django.urls import reverse

from jinja2 import environment

defenvironment

(**options)

: env=environment(

**options)

env.

globals

.update(

)return env

(3)將jinja2.py檔案定義的函式environment寫到配置檔案settings.py中。

以下配置模板資料夾templates的所有模板檔案都是有jianja2模板引擎執行解析處理

django內建的功能使用django模板引擎

templates =

[#使用django模板引擎,}

,#使用jinja2模板引擎,}

,]

jinja2與django的區別在於static函式,url函式,過濾器的使用

#static標籤

#django的用法

#jinja2的用法:

}#上下文使用

#django的用法

}#jinja2的用法

}#使用過濾器

}<

/div>

#}key is

}<

/div>

value is

}<

/div>

this is

if<

/div>

this is

else

<

/div>

#}"}">首頁<

/a>

在jinja2.py檔案裡定義函式myreplace,並將函式註冊到jinja2的環境函式environment裡。完成過濾器的自定義

#jinja2.py

from django.contrib.staticfiles.storage import staticfiles_storage

from django.urls import reverse

from jinja2 import environment

defmyreplace

(value, old=

'jinja2'

, new=

'django'):

return

str(value)

.replace(old, new)

# 將jinja2模版設定到專案環境

defenvironment

(**options)

: env = environment(

**options)

env.

globals

.update(

) env.filters[

'myreplace'

]= myreplace

return env

參考書籍《django web應用開發實戰》

c 第六章 模板

1 函式模板 template t add t a,t b return a b 隱式呼叫 add 5,6 顯示呼叫 add 5,6 模板之間可以構成過載,模板與普通函式之間也可構成過載,呼叫順序如下 跟某一普通的引數完全匹配,呼叫之,跟函式模板的引數可以完全匹配 隱式呼叫 呼叫之,跟函式模按引數不...

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

深入解析ATL第六章筆記

1 多重繼承之傳遞夾層 由於c 的語法不能在派生類中區分來自不同基類,但原型一致的方法,所以類似的 是不合法的 class cacepowerll public icowboy,public iartist 若要在com類中實現來自不同介面但原型一致的方法,則可借助傳遞夾層 struct iarti...