以下是一个使用Flask和Jinja2模板引擎的示例,演示了如何在templeate中使用模板继承:
首先,我们需要创建一个基础模板(base.html),它包含整个网站的基本结构和共享的代码。接下来,我们创建一个子模板(blog.html),该模板继承自基础模板,并可以添加自己的内容。
基础模板 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
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<header>
<h1>模板继承学习</h1>
</header>
<nav>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/about">关于</a></li>
</ul>
</nav>
<main>
{% block content %}{% endblock %}
</main>
<footer>
版权所有 © 2023 我的博客
</footer>
</body>
</html>
在上面的代码中,我们使用 {% block %}
标签来定义可替换的区块。title
区块用于设置页面的标题,content
区块用于插入子模板的内容。
接下来,我们创建子模板 blog.html,并继承自基础模板 base.html。示例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{% extends 'base.html' %}
{% block title %}博客{% endblock %}
{% block content %}
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
<p>作者:{{ post.author }}</p>
{% if post.published %}
<p>已发布</p>
{% else %}
<p>未发布</p>
{% endif %}
{% endblock %}
在上面的代码中,我们使用 {% extends 'base.html' %}
来指定该模板继承自 base.html。然后,我们可以定义自己的 {% block %}
区块,这里命名为 content
。
在博客子模板中,我们只需要编写特定的内容部分,而其余的结构和共享代码都会继承自基础模板。这样可以实现页面的模块化和重用。
最后,在 Flask 应用程序中,我们将使用 render_template 函数渲染子模板,并将相关数据传递给模板:
1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/blog')
def blog():
post = {'title': '文章标题', 'content': '文章内容', 'author': '作者', 'published': True}
return render_template('blog.html', post=post)
if __name__ == '__main__':
port_value = 5050
app.run(debug=True, host='0.0.0.0', port=port_value)
在上面的示例中,我们定义了一个路由函数 /blog
来处理博客页面的请求。在这个路由函数中,我们创建了一个名为 post
的字典,包含了一篇博客文章的信息。
然后,我们使用 render_template
函数来渲染子模板 blog.html,并将 post 字典传递给模板。
通过继承和模板化的方式,我们可以更好地组织和管理博客页面的代码,提高代码的可读性和可维护性。