Django2 X Django模板引擎

2021-10-05 12:57:12 字數 4401 閱讀 8488

django內建的模板引擎包含模板上下文(亦可稱為模板變數)、標籤和過濾器,各個功能說明如下:

模板上下文是模板中基本的組成單位,上下文的資料由檢視函式或檢視類傳遞。它以}表示,variable是上下文名稱,它支援python所有的資料型別,如字典、列表、元組、字串、整型和例項化物件。上下文的資料格式不同,在模板裡使用方式也有所差異,如下所示:

# 假如variable1 = '字串或整型'

}# 輸出"字串或整型

"# 假如variable2=

}# 輸出"字典或例項化物件

"# 假如variable3=['元組或列表']

}# 輸出"元組或列表

"

如果檢視沒有模板上下文傳遞資料或者模板上下文的某個屬性、索引下標不存在,django會將其設為空值。

標籤是對模板上下文進行控制輸出,它是以表示的,其中tag是標籤的名稱,django內建了許多模板標籤,比如(判斷標籤)、(迴圈標籤)或(路由標籤)等。

常用的內建標籤:

標籤描述

遍歷輸出上下文的內容

對上下文進行條件判斷

生成csrf_token 的標籤,用於防護跨站請求偽造攻擊

引用路由配置的位址。生成相應的路由位址

將上下文重新命名

載入匯入django的標籤庫

讀取靜態資源的檔案內容

模板繼承,***為模板檔名,使當前模板繼承***模板

重寫父類模板的**

在上述常用標籤中,每個標籤的使用方法都是各不相同,通過簡單的例子進一步了解標籤的使用方法,**如下:

# for標籤,支援巢狀,mylist可為列表、元組或某個物件

# item可自定義命名,代表當前迴圈的資料物件

# 是迴圈區域終止符,代表著區域的**由標籤for輸出

}# if標籤,支援巢狀

# 判斷條件與上下文之間使用空格隔開,否則程式會丟擲異常

# 與的作用是相同的}}

}# url標籤

# 生成不帶變數的url位址

首頁# 生成帶變數的url位址

第1頁# with標籤,與python的with的語法的功能相同

# total=number無須空格隔開,否則丟擲異常

}# load標籤,匯入靜態檔案標籤庫staticfiles

# static標籤,來自靜態檔案標籤庫staticfiles

在for標籤中,模板還提供了一些特殊的變數來獲取for標籤的迴圈資訊,變數說明如下:

變數描述

forloop.counter

獲取當前迴圈的索引,從1開始計算

forloop.counter0

獲取當前迴圈的索引,從0開始計算

forloop.revcounter

索引從最大數開始遞減,直到索引到1位置

forloop.revcounter0

索引從最大數開始遞減,直到索引到0位置

forloop.first

當遍歷的元素為第一項時為真

forloop.last

當遍歷的元素為最後一項時為真

forloop.parentloop

在巢狀的for迴圈中,獲取上層for迴圈的forloop

上述變數來自於forloop物件,該物件是在模板引擎for標籤時生成的,通過以下例子進一步了解forloop,例子如下:

這是第一次迴圈

這是最後一次迴圈

本次迴圈次數為:}

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'index',

# 新增自定義模版標籤的資料夾

'mydefined'

]

from django import template

# 建立模版物件

register = template.library()

# 定義模版節點類

class reversalnode(template.node):

def __init__(self, value):

self.value = str(value)

# 資料反轉處理

def render(self, context):

return self.value[::-1]

# 宣告並定義標籤

@register.tag(name='reversal')

# parse是解析器物件,token是被解析的物件

def do_reversal(parse, token):

try:

# tag_name是代表標籤名,即reversal

# value是由標籤傳遞的資料

tag_name, value = token.split_contents()

except:

raise template.templatesyntaxerror('syntax')

# 呼叫自定義的模板節點類

return reversalnode(value)

在mytags.py檔案裡分別定義類reversalnode和函式do_reversal,兩者實現功能說明如下:

為了驗證自定義標籤reversal的功能,我們在index的urls.py、views.py和模板檔案index.html裡編寫以下**:

# index的url.py

from django.urls import path

from .views import *

urlpatterns = [

# 定義路由

path('', index, name='index'),

]# index的views.py

from django.shortcuts import render

def index(request):

return render(request, 'index.html', locals())

# templates的index.html

在模板檔案index.html中使用自定義標籤,必須使用將自定義標籤檔案匯入,告知模板引擎從**查詢自定義標籤,否則無法識別自定義標籤,並提示templatesyntaxerror異常。

總結:

模板繼承是通過模板標籤來實現的,其作用是將多個模板檔案的共同**集中在乙個新的模板檔案中,然後各個模板可以直接呼叫新的模板檔案,從而生成html網頁,這樣可以減少模板之間重複的**,範例如下:

首頁

上述**是乙個完整的模板檔案,乙個完整的模板通常有

在base.html的**中看到,寫在模板標籤裡面,而里的內容改為。block標籤是為其他模板檔案呼叫時提供內容重寫的介面,body是對這個介面進行命名。在乙個模板中可以新增多個block標籤,只要每個block標籤的命名不相同即可。接著在模板index.html中呼叫共用模板base.html,**如下:

首頁

模板index.html呼叫共用模板base.html的實質是由模板繼承實現的,呼叫步驟如下:

從模板index.html看到,模板繼承魚python的類繼承原理一致的,通過繼承方式使具有父類的功能和屬性,同時也可以通過重寫來實現複雜多變的開發需求。

結果展示:

過濾器是對上下文的內容進行操作處理,如替換、反序和轉義等。通過處理器上下文可以將資料格式或內容轉化為我們想要的顯示效果,而且相應減少檢視的**量。過濾器的使用方法如下:

}
若上下文設有過濾器,則模板引擎在解析上下文時,首先由過濾器filter處理上下文variable,然後將處理後的結果進行解析並顯示在網頁上。variable代表模板上下文,管道符號"|"代表當前上下文使用過濾器,filter代表過濾器。單個上下文可以支援多個過濾器同時使用,例如:

}
在使用的過程中,有些過濾器還可以傳入引數,但僅支援傳入乙個引數。帶引數的過濾器與引數之間使用冒號隔開,並且兩者之間不能留有空格,例如:

}
django的內建過濾器可以在原始碼(\django\template\defaultfilters.py)裡找到具體的定義過程。

模2運算的原理

模2運算是一種二進位制演算法,crc校驗技術中的核心部分,因此,我們在分析crc演算法之前,必須掌握模2運算的規則。與四則運算相同,模2運算也包括模2加 模2減 模2乘 模2除四種二進位制運算。而且,模2運算也使用與四則運算相同的運算子,即 表示模2加,表示模2減,或 表示模2乘,或 表示模2除。與...

模2運算的原理

模2運算的原理 模2運算的原理 2011 09 26 10 59 模2運算是一種二進位制演算法,crc校驗技術中的核心部分,因此,我們在分析crc演算法之前,必須掌握模2運算的規則。與四則運算相同,模2運算也包括模2加 模2減 模2乘 模2除四種二進位制運算。而且,模2運算也使用與四則運算相同的運算...

模2運算的原理

模2 運算是一種二進位制演算法,crc校驗技術中的核心部分,因此,我們在分析 crc演算法之前,必須掌握模 2運算的規則。與四則運算相同,模2運算也包括模2加 模2減 模2乘 模2除四種二進位制運算。而且,模2運算也使用與四則運算相同的運算子,即 表示模2加,表示模2減,或 表示模2乘,或 表示模2...