
- Django 基本概念
- Django - 首頁
- Django - 基礎
- Django - 概述
- Django - 環境搭建
- Django - 建立專案
- Django - 應用生命週期
- Django - 建立檢視
- Django - URL 路由
- Django - 首頁頁面
- Django - 模板系統
- Django - MVT
- Django - 新增主模板
- Django Admin 後臺管理
- Django Admin - 介面
- Django Admin - 建立使用者
- Django Admin - 新增模型
- Django Admin - 設定顯示欄位
- Django Admin - 更新物件
- Django 模型
- Django - 模型
- Django - 插入資料
- Django - 更新資料
- Django - 刪除資料
- Django - 更新模型
- Django 靜態檔案
- Django - 新增靜態檔案
- Django - 新增 CSS 檔案
- Django 高階應用
- Django - 404 頁面未找到
- Django - 頁面重定向
- Django - 傳送郵件
- Django - 通用檢視
- Django - 表單處理
- Django - 檔案上傳
- Django - Apache 配置
- Django - Cookie 處理
- Django - Session 會話
- Django - 快取
- Django - 評論
- Django - RSS
- Django - AJAX
- Django 資源推薦
- Django - 快速指南
- Django - 資源推薦
- Django - 討論
Django - 模板系統
Django 允許分離 Python 和 HTML 程式碼,Python 程式碼位於檢視中,HTML 程式碼位於模板中。為了連線兩者,Django 依賴於 render 函式和 Django 模板語言。
Render 函式
此函式接受三個引數:
請求 - 初始請求。
模板路徑 - 這是相對於專案 settings.py 檔案中 TEMPLATE_DIRS 選項的相對路徑。
引數字典 - 包含模板中所需所有變數的字典。您可以建立此變數,也可以使用 locals() 傳遞在檢視中宣告的所有區域性變數。
Django 模板語言 (DTL)
Django 的模板引擎提供了一種小型語言來定義應用程式的使用者介面層。
顯示變數
變數形式如下:{{variable}}。模板會將變數替換為檢視在 render 函式的第三個引數中傳送的變數。讓我們修改 hello.html 來顯示今天的日期:
hello.html
<html> <body> Hello World!!!<p>Today is {{today}}</p> </body> </html>
然後我們的檢視將更改為:
def hello(request): today = datetime.datetime.now().date() return render(request, "hello.html", {"today" : today})
訪問 URL /myapp/hello 後,我們將獲得以下輸出:
Hello World!!! Today is Sept. 11, 2015
您可能已經注意到,如果變數不是字串,Django 將使用 __str__ 方法來顯示它;同樣,您可以像在 Python 中一樣訪問物件屬性。例如:如果要顯示日期年份,我的變數將是:{{today.year}}。
過濾器
它們幫助您在顯示時修改變數。過濾器的結構如下:{{var|filters}}。
一些例子:
{{string|truncatewords:80}} - 此過濾器將截斷字串,您將只看到前 80 個單詞。
{{string|lower}} - 將字串轉換為小寫。
{{string|escape|linebreaks}} - 跳脫字元串內容,然後將換行符轉換為標籤。
您還可以為變數設定預設值。
標籤
標籤允許您執行以下操作:if 條件語句,for 迴圈,模板繼承等等。
if 標籤
就像在 Python 中一樣,您可以在模板中使用 if、else 和 elif:
<html> <body> Hello World!!!<p>Today is {{today}}</p> We are {% if today.day == 1 %} the first day of month. {% elif today.day == 30 %} the last day of month. {% else %} I don't know. {%endif%} </body> </html>
在這個新的模板中,根據一天中的日期,模板將呈現某個值。
for 標籤
就像 'if' 一樣,我們有 'for' 標籤,它的工作方式與 Python 中完全相同。讓我們更改 hello 檢視以將列表傳輸到我們的模板:
def hello(request): today = datetime.datetime.now().date() daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})
使用 {{ for }} 顯示該列表的模板:
<html> <body> Hello World!!!<p>Today is {{today}}</p> We are {% if today.day == 1 %} the first day of month. {% elif today.day == 30 %} the last day of month. {% else %} I don't know. {%endif%} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} </body> </html>
我們應該得到類似這樣的結果:
Hello World!!! Today is Sept. 11, 2015 We are I don't know. Mon Tue Wed Thu Fri Sat Sun
block 和 extend 標籤
如果沒有模板繼承,模板系統將是不完整的。這意味著當您設計模板時,您應該有一個帶有“空洞”的主模板,子模板將根據自己的需要填充這些“空洞”,例如,頁面可能需要為選定的選項卡使用特殊的 CSS。
讓我們更改 hello.html 模板以繼承自 main_template.html。
main_template.html
<html> <head> <title> {% block title %}Page Title{% endblock %} </title> </head> <body> {% block content %} Body content {% endblock %} </body> </html>
hello.html
{% extends "main_template.html" %} {% block title %}My Hello Page{% endblock %} {% block content %} Hello World!!!<p>Today is {{today}}</p> We are {% if today.day == 1 %} the first day of month. {% elif today.day == 30 %} the last day of month. {% else %} I don't know. {%endif%} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} {% endblock %}
在上面的例子中,呼叫 /myapp/hello 我們仍然會得到與之前相同的結果,但現在我們依賴於 extends 和 block 來重構我們的程式碼:
在 main_template.html 中,我們使用 block 標籤定義塊。title 塊將包含頁面標題,content 塊將包含頁面主要內容。在 home.html 中,我們使用 extends 繼承自 main_template.html,然後我們填充上面定義的塊(content 和 title)。
註釋標籤
註釋標籤有助於在模板中定義註釋,而不是 HTML 註釋,它們不會出現在 HTML 頁面中。這對於文件編寫或只是註釋程式碼行很有用。