Python Django 母版和继承解析
母版是 Django 中非常重要的一部分,它可以让我们在不同页面之间共享通用的 HTML 结构或功能。母版还可以作为其他模板的基础,减少重复代码并提高开发效率。本文将详细介绍如何使用 Django 中的母版和继承。
创建母版
在 Django 中,创建母版通常是通过创建一个基本的 HTML 模板,将其中重复的、通用的部分放到头部 (head) 和底部 (footer) 之间进行编写。接下来,我们将创建一个简单的母版示例,其中包含了 Bootstrap 框架和网站的导航栏、页脚等元素。
<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Website{% endblock %}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
crossorigin="anonymous">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">My Website</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
</ul>
</div>
</nav>
{% block content %}{% endblock %}
<hr>
<footer>
<p>© 2021 My Website. All rights reserved.</p>
</footer>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHFCNhG5"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>
</body>
</html>
在上面的代码中,我们使用了 Bootstrap 框架进行网站的布局,同时定义了 {% block %}
模板标签,以便在其他模板中填入相应的内容。注意,{ % block title % }
是一个默认值,可以在子模板中被覆盖。
继承母版
在创建了母版之后,我们可以通过继承母版的方式创建其他的视图。接下来我们将介绍如何通过继承母版创建一个简单的视图。
<!-- templates/index.html -->
{% extends 'base.html' %}
{% block title %}Index{% endblock %}
{% block content %}
<h1>Welcome to my website!</h1>
<p>This is the home page.</p>
{% endblock %}
在上面的代码中,我们使用了 {% extends 'base.html' %}
来继承母版,并在 {% block title %}
和 {% block content %}
中填写了特定的内容。此时,我们创建的 index.html
就是继承自母版的子模板。
示例二: 更加复杂的继承
在示例二中,我们将介绍如何通过继承母版来创建更加复杂的视图。我们将创建一个包含二级导航栏和两个侧边栏的页面模板。
<!-- templates/layout.html -->
{% extends 'base.html' %}
{% block content %}
<div class="container-fluid">
<div class="row">
<div class="col-sm-3">
{% block left_sidebar %}
<h3>Left Sidebar</h3>
{% endblock %}
</div>
<div class="col-sm-6">
<div class="row">
<div class="col-sm-12">
{% block top_nav %}
<nav class="navbar navbar-light bg-light">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="#">Nav item 1</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Nav item 2</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Nav item 3</a>
</li>
</ul>
</nav>
{% endblock %}
</div>
<div class="col-sm-12">
{% block main_content %}
<h1>Welcome to my website!</h1>
<p>This is the home page.</p>
{% endblock %}
</div>
</div>
</div>
<div class="col-sm-3">
{% block right_sidebar %}
<h3>Right Sidebar</h3>
{% endblock %}
</div>
</div>
</div>
{% endblock %}
在这个示例中,我们创建了一个名为 layout.html
的中间模板,继承自 base.html
,并在其中定义了多个 {% block %}
标签,以供其他继承自它的模板进行填充。
下面是另一个继承自 layout.html
的示例:
<!-- templates/my_page.html -->
{% extends 'layout.html' %}
{% block top_nav %}
{{ block.super }}
<li class="nav-item">
<a class="nav-link" href="#">My Page</a>
</li>
{% endblock %}
{% block left_sidebar %}
{{ block.super }}
<ul class="list-group">
<li class="list-group-item"><a href="#">Link 1</a></li>
<li class="list-group-item"><a href="#">Link 2</a></li>
<li class="list-group-item"><a href="#">Link 3</a></li>
<li class="list-group-item"><a href="#">Link 4</a></li>
</ul>
{% endblock %}
{% block right_sidebar %}
{{ block.super }}
<ul class="list-group">
<li class="list-group-item"><a href="#">Link 5</a></li>
<li class="list-group-item"><a href="#">Link 6</a></li>
<li class="list-group-item"><a href="#">Link 7</a></li>
<li class="list-group-item"><a href="#">Link 8</a></li>
</ul>
{% endblock %}
{% block main_content %}
{{ block.super }}
<p>This is my page content.</p>
{% endblock %}
在这个示例中,我们创建了一个名为 my_page.html
的模板,继承自 layout.html
。在这个模板中我们通过使用 {{ block.super }}
填充了继承自 layout.html
的各个 {% block %}
。同时,我们在 top_nav
、left_sidebar
、right_sidebar
和 main_content
中填写了特定的内容,实现了页面的不同效果。
通过这两个示例,我们可以深入学习 Django 中的母版和继承。母版和继承是 Django 中非常重要的一部分,它们可以让我们有效地管理、复用和组织代码,提高开发效率,增强代码的可读性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Django 母版和继承解析 - Python技术站