21 Django模板之模板继承

在上一篇教程中,我们探讨了如何使用Django模板来渲染动态内容。了解了如何使用基本的模板语法后,今天我们将学习一个更高级的功能:模板继承。模板继承使得我们可以创建一个基础模板,然后在此基础上扩展子模板,从而实现代码的复用和结构的清晰。

什么是模板继承?

模板继承允许我们定义一个“母模板”,在这个模板中,我们可以定义一些通用的结构(如头部、底部和导航栏),然后其他模板可以“继承”这个母模板,只需实现特定的内容部分。这不仅减少了代码重复,也使得项目结构更加清晰。

基本示例

让我们通过一个简单的案例来理解模板继承的概念。

创建基础模板

首先,我们创建一个名为 base.html 的基础模板。这个模板将包含网站的通用结构,比如头部和尾部。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}网站标题{% endblock %}</title>
</head>
<body>
<header>
<h1>我的Django网站</h1>
<nav>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/about/">关于我们</a></li>
</ul>
</nav>
</header>

<main>
{% block content %}
<!-- 子模板内容 -->
{% endblock %}
</main>

<footer>
<p>© 2023 我的Django网站. 版权所有.</p>
</footer>
</body>
</html>

在这个模板中,我们定义了头部(header)和底部(footer),并使用了两个block标签,分别是 titlecontent。子模板可以通过这两个模块插入特定的内容。

创建子模板

接下来,我们创建一个名为 index.html 的子模板,它将继承自 base.html。我们在这个子模板中,重写 titlecontent 内容块。

1
2
3
4
5
6
7
8
{% extends 'base.html' %}

{% block title %}首页 - 我的Django网站{% endblock %}

{% block content %}
<h2>欢迎来到我的网站!</h2>
<p>这是主页内容。</p>
{% endblock %}

在这个子模板中,使用 {% extends 'base.html' %} 语句来继承父模板。我们根据需要重写了 titlecontent 的内容。

渲染模板

在视图中,我们可以渲染我们的 index.html 子模板。假设我们有如下视图:

1
2
3
4
from django.shortcuts import render

def index(request):
return render(request, 'index.html')

当用户访问主页时,将会看到基于 base.html 结构的网页,同时显示 index.html 中定义的内容。

其他注意事项

块的可嵌套

模板的 block 可以嵌套。例如,你可以在父模板中定义一个 block,然后在子模板中创建另一个子类用于特定的内容。

处理更复杂的逻辑

对于更复杂的网页,可以考虑使用多个层次的继承。例如,一个基础模板可以作为所有页面的基础模板,一个关于页模板可以从 base.html 继承,然后再次定义内容块。

使用 include 标签

除了模板继承,Django 也允许使用 {% include %} 标签来包含其他HTML文件,可以进一步帮助我们分隔和复用代码。

总结

模板继承是 Django 模板系统的一个强大特性,它可以帮助我们减少重复代码,使得网页结构更加清晰。在这一篇教程中,我们学会了如何创建一个基础模板,并通过子模板进行内容扩展。在下一篇教程中,我们将学习如何使用 Django 创建表单,继续扩展我们的 Django 知识。

希望你能在实际项目中充分利用模板继承的特性来提升开发效率与代码可维护性。如果你对本篇教程有任何疑问或建议,欢迎在下面留言讨论!

21 Django模板之模板继承

https://zglg.work/django-zero/21/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论