開始使用 Django 範本

已完成

範本是可用來產生文字格式 (例如 HTML 或 XML) 的文字檔。 每個範本都包含一些在網站共用的靜態資料,但也可以包含動態資料的預留位置。 範本包含可控制行為的變數和標籤,以及會顯示為最後一頁的內容。

讓我們來探索範本在 Django 中的運作方式。

變數

範本中的變數行為與任何其他程式設計語言相同。 我們可以使用這些變數來指出在執行階段評估的值。

Django 提供一種方式,可讓您使用語法 {{ }} 在範本中顯示變數。 放在雙大括號內的任何變數的文字內容都會在評估後被放入範本中。 例如,如果我們想要顯示犬隻的名稱,可以使用 {{dog.name}}

此檢視會使用 render 函式將變數傳遞到範本中,我們將在稍後的課程模組中探索此函式。 您可以將值和其他資料傳遞給範本,包括來自 Django ORM 的 QuerySet。 這可讓您顯示應用程式資料庫中的資料。

篩選條件

篩選條件是在範本中要求資料時,控制資料顯示方式的絕佳方法。 由於已經建立篩選條件,因此其可讓您輕鬆地將資料格式化,而不需要撰寫任何特殊程式碼。

例如,假設我們必須印出犬隻品種的名稱,而我們要確定每個名稱的第一個字母都是大寫。

{{ dog.name | capfirst }}

變數位於豎線符號 (|) 的左側,而篩選條件則位於右側。 這只是您在使用 Django 範本篩選條件時可用來操作資料的許多篩選條件之一。

標籤

您可以使用標籤來執行迴圈、建立文字,或提供範本引擎的其他命令類型。 標籤通常類似 Python 語法。 但因為其是在範本內 (而不是在 Python 解譯器內) 執行,所以您會發現語法中有些微差異。 因為無法如同 Python 這樣依賴標籤,所以每個區塊陳述式都需要對應的 end

我們可以針對布林值邏輯使用 if 陳述式,以及針對反覆運算使用 for 迴圈。 if 陳述式的核心語法看起來如下所示:

{% if dogs %}
    <h2>There are {{ dogs | length }} ready for adoption!</h2>
{% else %}
    <h2>We have no dogs ready for adoption. Please check back later!</h2>
{% endif %}

注意

elif 陳述式的使用方式與 Python 中的 elif 方式相同。

同樣地,我們可以使用 for 迴圈來顯示清單中所有犬隻的名稱:

<ul>
    {% for dog in dogs %}
        <li>{{ dog.name }}</li>
    {% endfor %}
<ul>

範本繼承

範本可用來產生您希望使用者在使用您應用程式時看到的 HTML。 應用程式中的頁面通常會共用通用結構,其中導覽可能位於左側、標題位於頂端,且有一個一致的樣式表單。 Django 範本透過繼承支援共用結構。

建立父頁面

建立父頁面與建立任何 Django HTML 範本相同。 您會提供外部結構,然後包含 {% block %} 預留位置。 這些預留位置可讓子頁面提供要放在這些預留位置中的內容。

讓我們建立一個父頁面來匯入樣式表單、提供預設標題,並提供我們要在所有頁面上顯示的標頭:

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>{% block title %}Shelter site{% endblock %}</title>
</head>
<body>
    <h1>Shelter site</h1>
    {% block content %}
    {% endblock %}
</body>
</html>

建立子頁面

我們可以使用 extends 關鍵字,從父頁面建立子頁面。 我們透過這個關鍵字提供了父範本的 HTML 檔案名稱。 接著,我們會使用適當的 {% block %} 陳述式來新增該頁面的特定內容。

{% extends "parent.html" %}

{% block title %}
Welcome to the Shelter site!
{% endblock %}

{% block content %}
Thank you for visiting our site!
{% endblock %}

顯示頁面時,看起來會如下所示:

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>Welcome to the shelter site</title>
</head>
<body>
    <h1>Shelter site</h1>
    Thank you for visiting our site!
</body>
</html>

請注意,子頁面中的內容如何取代預留位置。

注意

在此範例中,我們使用靜態文字。 如您所見,您也可以使用動態內容。