1. Django模板继承介绍
在开发Web应用程序时,经常需要创建多个Web页面,特别是大型应用程序。这些Web页面往往需要共享一些公共元素(例如导航栏,页脚等)。为了避免在每个页面中都编写相同的代码,可以使用Django模板继承。
Django模板继承是一种用于创建Web页面的技术,它允许我们定义一个模板作为其他页面的基础。这样在其他页面中只需要编写变化的内容即可,无需重复定义与其他页面相同的结构。
1.1 继承模板的语法
要定义一个基本模板(例如base.html),可以使用({% block %})标记定义模板中的可变内容。在其他页面中使用({% extends %})标记指定要继承的基础模板,并使用({% block %})标记覆盖需要更改的交互内容。
下面是一个我们将要使用的基础模板:
<html>
<head>
<title>{% block title %}</title>
</head>
<body>
<div id="header">
{% block header %}{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
<div id="footer">
{% block footer %}{% endblock %}
</div>
</body>
</html>
1.2 继承模板的例子
为了演示模板继承,我们将创建一个包含标题,正文和页脚的简单网站。页面可以通过基本模板创建。我们将创建两个页面,Home页面和About页面。
首先,我们需要在主目录的templates目录中创建一个名为base.html
的文件:
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<div id="header">
{% block header %}<h1>Welcome to my website</h1>{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
<div id="footer">
{% block footer %}<p>All rights reserved. Copyright ©{% now 'Y' %}</p>{% endblock %}
</div>
</body>
</html>
我们将{% block %}
标记放在包含
接下来我们将使用以上的base.html
文件创建我们的Home页面。在主目录的templates目录中,创建一个新文件home.html
:
{% extends "base.html" %}
{% block title %}My Home Page{% endblock %}
{% block content %}
<p>This is my home page.</p>
{% endblock %}
在这个例子中,我们使用{% extends %}
指令来指定要继承的基本模板base.html
。在{% block %}
标记中,我们覆盖title
和content
块,以包含页面的标题和内容。
2. Django模板继承示例代码
下面是一个完整的包含基础模板和两个页面的示例代码:
在 templates/base.html 中:
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<div id="header">
{% block header %}<h1>Welcome to my website</h1>{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
<div id="footer">
{% block footer %}<p>All rights reserved. Copyright ©{% now 'Y' %}</p>
{% endblock %}
</div>
</body>
</html>
在 templates/home.html 中:
{% extends "base.html" %}
{% block title %}My Home Page{% endblock %}
{% block content %}
<p>This is my home page.</p>
{% endblock %}
在 templates/about.html 中:
{% extends "base.html" %}
{% block title %}About Me{% endblock %}
{% block content %}
<p>This is my about page.</p>
{% endblock %}
{% block footer %}
<p>Contact me at name@email.com</p>
{% endblock %}
我们可以使用以下命令启动我们的Django Web
应用程序:
python manage.py runserver
然后在 http://127.0.0.1:8000/home/
和 http://127.0.0.1:8000/about/
访问您的页面。
我们可以看到Home
页面使用base.html
作为基本模板,并覆盖了title
和content
块。同样的,About
页面也使用base.html
作为基本模板,并覆盖了title
,content
和footer
块。