跳轉至

建立 2026-09-17 更新 2026-09-17

Templates

Template 是 Django 用來產生 HTML 畫面的樣板檔案,語法接近 HTML,但額外提供變數輸出與流程控制的標籤,讓後端資料可以動態嵌入畫面。View 透過 render() 把資料(context)交給 Template,Template 再依內容產生最終的 HTML 回傳給瀏覽器。

官方文件:Templates

Template 檔案放在哪裡

預設會在每個 App 底下的 templates/ 目錄尋找樣板,並建議在裡面再建立一層與 App 同名的子目錄,避免不同 App 的樣板檔名互相覆蓋:

myapp/
└── templates/
    └── myapp/
        └── home.html

View 中用相對於 templates/ 的路徑引用:

return render(request, "myapp/home.html", {"posts": posts})

兩種基本語法

Django 樣板語言主要有兩種標記:

  • {{ 變數 }}:輸出變數的值。
  • {% 標籤 %}:執行邏輯,例如迴圈、條件判斷、載入樣板。
<h1>{{ page_title }}</h1>

<ul>
{% for post in posts %}
    <li>{{ post.title }}{{ post.created_at }})</li>
{% empty %}
    <li>目前還沒有文章。</li>
{% endfor %}
</ul>

{% if user.is_authenticated %}
    <p>歡迎回來,{{ user.username }}!</p>
{% else %}
    <p><a href='{% url "login" %}'>請先登入</a></p>
{% endif %}

{{ 變數 }} 也支援用點號(.)存取屬性、字典的 key,或呼叫沒有參數的方法,例如 {{ post.author.username }};另外可以用管線符號 | 套用過濾器(filter)轉換輸出,例如 {{ post.created_at|date:"Y-m-d" }}

樣板繼承

多數網站的每一頁都共用同一套版型(導覽列、頁尾等),Django 用樣板繼承避免重複撰寫。先定義一個基礎樣板,用 {% block %} 標出子樣板可以覆寫的區塊:

{# templates/base.html #}
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
    <title>{% block title %}我的網站{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

子樣板用 {% extends %} 繼承,並只需要覆寫需要客製的區塊:

{# templates/myapp/home.html #}
{% extends "base.html" %}

{% block title %}首頁{% endblock %}

{% block content %}
    <h1>歡迎光臨</h1>
{% endblock %}

載入靜態資源

樣板中要引用 CSS、JavaScript、圖片等靜態檔案時,須先載入 static 標籤庫,細節與部署方式請見 Static Files

{% load static %}

<img src="../{% static 'myapp/example.jpg' %}" alt="範例圖片">

下一步

畫面串好資料來源後,接著看資料實際存在哪裡、怎麼查詢:Models