Django 新增主模板
extends 標籤
在之前的頁面中,我們建立了兩個模板:一個用於列出所有成員,另一個用於顯示成員的詳細資訊。
這兩個模板包含了一組相同的 HTML 程式碼。
Django 提供了一種建立“父模板”的方法,您可以將其包含在所有頁面中,以處理所有頁面中相同的元素。
首先建立一個名為 master.html
的模板,其中包含所有必需的 HTML 元素。
主模板
my_tennis_club/members/templates/master.html
:
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
您是否在 <title>
元素和 <body>
元素中看到了 Django 的 block 標籤?
它們是佔位符,告訴 Django 將這個塊替換為來自其他來源的內容。
修改模板
現在,這兩個模板(all_members.html
和 details.html
)可以使用 master.html
模板了。
這透過使用 {% extends %}
標籤包含主模板,並插入 title
塊和 content
塊來完成。
Members
my_tennis_club/members/templates/all_members.html
:
{% extends "master.html" %}
{% block title %}
My Tennis Club - List of all members
{% endblock %}
{% block content %}
<h1>Members</h1>
<ul>
{% for x in mymembers %}
<li><a href="details/{{ x.id }}">{{ x.firstname }} {{ x.lastname }}</a></li>
{% endfor %}
</ul>
{% endblock %}
執行示例 »
詳情
my_tennis_club/members/templates/details.html
:
{% extends "master.html" %}
{% block title %}
Details about {{ mymember.firstname }} {{ mymember.lastname }}
{% endblock %}
{% block content %}
<h1>{{ mymember.firstname }} {{ mymember.lastname }}</h1>
<p>Phone {{ mymember.phone }}</p>
<p>Member since: {{ mymember.joined_date }}</p>
<p>Back to <a href="/members">Members</a></p>
{% endblock %}
執行示例 »
如果您已經在自己的計算機上完成了所有步驟,您可以在自己的瀏覽器中看到結果: 127.0.0.1:8000/members/
。
如果伺服器已停止,您需要使用 runserver
命令重新啟動它。
py manage.py runserver