模板是由html**和一些邏輯控制**組成的,邏輯控制**除了前面介紹的變數和過濾器,還要乙個非常重要的模板標籤。模板標籤的語法規則是,模板標籤在渲染的過程中能提供任意的邏輯關係,模板標籤一般都有著與之對應的結束標籤,其標籤名為在原來的標籤名前加上end。下面介紹下一些常用的模板標籤。
條件標籤用於判斷,可以使用and,or,not,in等等來組織你的邏輯,但不允許and和or同時出現的條件語句中。
比較是否相等,只限於簡單的型別,比如字串、整數、小數的比較,列表、字典、元組不支援。
檢查乙個值是否在上一次的迭代中改變,也可以配合else來寫入未改變所執行的語句。
跟python的for迴圈用法是一樣的,但不同的是模板中的for迴圈的迭代次數不能靠下標來獲取,只能通過迴圈引數來獲取,下圖是一些常用的迴圈引數。
for ... empty用於在for迴圈取到空值時再執行empty內的語句。
load用於載入第三方標籤,常用於靜態檔案的引用中,如。
url標籤是通過name來引入路由配置的位址,返回url的絕對路徑,還可在name空格後面新增引數。
用更簡單的變數名快取複製的變數名。
這個標籤用於關閉自動轉義,類似於過濾器safe。
comment用於多行注釋標籤,要注意的是comment標籤不能巢狀使用。用於單行注釋
block標籤可以被子模板覆蓋.檢視,這裡的content是名稱,在下面介紹模板繼承時會用到這裡。
extend用來指定當前模板是繼承自哪個模板的。
cycle標籤常用在for迴圈中,每當這個標籤被訪問,則傳出乙個它的可迭代引數的元素。第一次訪問返回第乙個元素,第二次訪問返回第二個引數,以此類推.一旦所有的變數都被訪問過了,就會回到最開始的地方,重複下去。
傳遞乙個模板變數li = [1,2,3,4]給for迴圈,迭代四次cycle標籤,效果如下。
這是第}次迭代:
這是第1次迭代: sky
這是第2次迭代: run
這是第3次迭代: water
這是第4次迭代: sky
元素不僅可以是自己寫的字串,還可以是模板變數。下面傳遞三個模板變數給cycle標籤。
這是第}次迭代:
這是第1次迭代: 12580
這是第2次迭代: girl
這是第3次迭代: [1, 2, 3, 4]
這是第4次迭代: 12580
被包含在cycle中的變數將會被自動轉義,從而使包含在變數中的標籤對失效。若傳遞'b':'hello world','i':'i am well ', 如下所示:
這是第}次迭代:
這是第1次迭代:hello world這是第2次迭代: i am well
這是第3次迭代:hello world這是第4次迭代: i am well
我們可以通過autoescape標籤來關閉自動轉義,如下所示:
這是第}次迭代:
我們也可以連續引用乙個當前迴圈的值,要達到這個目的,只需使用「as」來給乙個別名,當要再次引用當前迴圈值時只需輸入其別名即可。當要進入下一迴圈值可cycle一次別名即可。
如果你只是想要宣告cycle,但是不產生第乙個值,你可以新增乙個silent關鍵字來作為cycle標籤的最後乙個關鍵字。
這是第}次迭代:
別名的變數是:}
這是第1次迭代:
別名的變數是:sky
這是第2次迭代:
別名的變數是:run
這是第3次迭代:
別名的變數是:water
這是第4次迭代:
別名的變數是:sky
往往乙個**的不同網頁都有著許多相同或相似的地方,模板的繼承可以讓你建立乙個基本的骨架模板,然後使其他模板可以繼承它。乙個模板要想能被其他模板所繼承,那麼對於繼承的部分就要使用block標籤來囊括。對於子模版來說,繼承其他模板的標籤是extend,,該標籤必須是模板中第乙個出現的標籤,類似於python導包,一般都是放在首行。
子模版對於父模板中的block標籤內的內容,即可繼承,也可以自己修改。說到底,子模板的繼承其實就是 替換掉 父模板中同名的block塊,其餘沒有被替換掉的就被子模板原封不動的繼承了下來。這裡要注意的是,block中,前面的百分號的後面需要有空格,後面的百分號前面需要有空格。必須按格式來,否則模板引擎會識別不了 。
在子模版中,在其對應的block中,不僅可以修改從父模板繼承下來的內容,也可以在修改後的基礎上,利用block.super變數再次提取父模板的這塊內容。在子模版的block中,不僅可以自己修改內容或提取父模板的內容,還可以引用其他模板的內容,引用的標籤是include。
這裡要注意的是,子模板中的所有內容,必須出現在父模板定義好的block中,否則django將不會渲染。
下面是子模版的**
這是子模版的主頁
這裡再呼叫父模板的內容:}
下面分別是父模板和被引用模板的**
這是乙個書店主頁
這是所有頁面都有的部分
這是演示部分
這是被引用的部分
子模版渲染效果如下:
靜態檔案一般指的就是js檔案、css檔案、存放的image等,首先我們可以在專案下建立乙個static目錄,再在其下分別建立三個子目錄,分別是css、js、image。然後在settings檔案下進行配置,新增乙個staticfiles_dirs設定靜態檔案目錄路徑,同templates。
引用靜態檔案,選載入靜態檔案的目錄static,使用load標籤。然後對於js檔案引用及css和的引用於前端是一樣的,只是在輸入檔案路徑時用static標籤來引入。下面是乙個小例子。
Django 模板渲染
參考文件 django的學習已經丟了很長一段時間了,時值年底,基本工作都差不多了,準備重新撿起來。學習心得也會有空mark一下!準備作業 讓我們一覽 django 全貌 urls.py 入口,關聯到對應的views.py中的乙個函式 或者generic類 訪問 就對應乙個函式。views.py 處理...
Django 渲染到模板
簡單的路由操作 from index import views urlpatterns path admin admin.site.urls path index views.index index應用下的 views 檔案進行輸出到模板方法 第一步 template新建 index.html 第二...
Django之 靜態模板渲染
既可以簡單的 django.http.httpresponse 來把內容顯示到網頁上,也可以使用渲染模板的方法來顯示內容。說明 是基於 django 1.8,但 django 1.4 djagno 1.11 操作流程也是一樣的。1.建立乙個 sundyblog 專案,和乙個 名稱為 blog 的應用...