下面我将详细讲解 Python 的 Django 框架中的模版继承。
什么是 Django 模版继承?
在 Django 中,模版继承是一种重用模版代码的方法。它允许我们在不重复编写相同代码的情况下定义基本模板(通常是布局),并在子模板中继承这些基本模板。这使得模板更具可重用性和可维护性。
Django 模版继承的基本结构
一般来说,Django 模版继承具有以下基本结构:
{% extends “base.html” %}
{% block content %}
{% endblock %}
其中,{% extends %}
标签指定从哪个模板进行继承,并且被继承的模板是占位符的。在子模板中,{% block %}
标签用于定义占位符并允许子模板修改父模板并插入子模板特定的内容。
示例1
现在我们来看一个具体的示例。假设我们有一个基本模板 base.html
,我们想要在该模板的内容区域插入子模板 child.html
的内容。我们可以这样做:
base.html:
<html>
<head>
<title>{% block title %} {% endblock %}</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
child.html:
{% extends "base.html" %}
{% block title %}
My Child Page
{% endblock %}
{% block content %}
<h1>Welcome to My Child Page</h1>
{% endblock %}
在子模板中,我们使用 {% extends "base.html" %}
指定从 base.html
模板中继承。{% block title %}
定义了一个占位符,我们在子模板中可以重载它。同样,{% block content %}
也定义了一个占位符,我们使用这个占位符在子模板中插入特定的内容。最终,子模板中的内容将插入基本模板中的占位符对应位置,形成最终的输出页面。
示例2
现在,我们再来看一个稍微复杂一些的例子。假设我们有一个 Blog 网站,其中包含多个页面,并且我们希望所有页面都具有类似的外观和布局。我们可以使用 Django 的模版继承策略来实现这一目标。
base.html:
<html>
<head>
<title>{% block title %}My Blog{% endblock %}</title>
</head>
<body>
<div class="container">
<div class="header">
<h1>{{ blog_name }}</h1>
<ul class="page-links">
<li><a href="/">首页</a></li>
<li><a href="/archive/">归档</a></li>
<li><a href="/about/">关于</a></li>
</ul>
</div>
{% block content %}
{% endblock %}
</div>
</body>
</html>
archive.html:
{% extends "base.html" %}
{% block title %}
{{ blog_name }} - 归档
{% endblock %}
{% block content %}
<ul class="post-list">
{% for post in posts %}
<li><a href="/post/{{ post.id }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}
about.html:
{% extends "base.html" %}
{% block title %}
{{ blog_name }} - 关于
{% endblock %}
{% block content %}
<p>这个站点专注于分享关于 Django 和 Python 的教程和资源。</p>
{% endblock %}
在这个例子中,我们定义了一个基本模板 base.html
,用于呈现网站的头部和底部。各个页面可以直接继承基本模板,并可以使用 content
块插入具体的内容。其中,ul page-links
是我们在 base.html
中定义的导航栏,子模板可以对其进行修改。例如,在 about.html
中,我们只在 content
块中添加了一条关于站点的简短介绍,而修改了 title
块。
这个例子中,我们还使用了 Django 模板引擎的另外一个特性,变量渲染。在基本模板中,我们使用了变量 {{ blog_name }}
来动态渲染网站名称,并在子模板中使用了变量 {{ posts }}
,遍历所有 posts
并呈现一个带有超链接的文章列表。
总之,Django 模版继承是一种非常有用的技术,在减少代码重复和提高代码可维护性方面具有巨大优势。希望这篇文章能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python的Django框架中的模版继承 - Python技术站