Django 添加 Master 主模板

继承标签

在前面的页面中,我们创建了两个模板,一个用于列出所有成员,另一个用于显示成员的详细信息。

这两个模板都包含一组相同的 HTML 代码。

Django 提供了一种创建"父模板"的方法,您可以将它包含在所有页面中,从而实现所有页面中相同的功能。

首先创建一个名为 master.html 的模板,并包含所有必要的 HTML 元素:

Master

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 代码块标签?

它们是占位符,告诉 Django 将此代码块替换为来自其他来源的内容。


修改模板

现在,两个模板(all_members.html 和 details.html)可以使用这个 master.html 模板。

这可以通过包含 {% extends %} 标签来引入 master 模板,并插入一个 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 命令重新启动它:

python manage.py runserver