這個函式有三個引數 ?
請求? 初始化請求
模板路徑 ? 這是相對於在專案 settings.py 檔案的變數到 TEMPLATE_DIRS 選項的路徑。
引數字典 ? 字典包含所需的模板中的所有變數。這個變數可以建立或者可以使用 locals() 通過在檢視中宣告的所有區域性變數。
變數顯示如下:{{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迴圈,模板繼承以及更多。
就像在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 == 30 %} the last day of month. {% else %} I don't know. {%endif%} </body> </html>
就像'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 == 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
模板系統是不完整模板繼承。當您設計模板的含義,子模板會根據自己的需要填寫一個主模板,就像一個頁面中所選索引標籤可能需要一個特殊的CSS。
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 == 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,我們仍然會得到相同的結果和以前一樣,但現在我們靠的是擴充套件,並不用重構程式碼-?
在 main_template.html 我們定義使用標籤塊。標題列塊將包含頁面標題,以及內容塊將在頁面主內容。在Home.html中使用擴充套件繼承來自main_template.html,那麼我們使用上面塊定義(內容和標題)。
注釋標籤用來模板定義注釋,不是HTML註釋,它們將不會出現在HTML頁面。它可以是一個檔案或只是注釋一行程式碼。