推荐答案
在 Flask 中,子模板可以通过 {% extends "父模板文件名.html" %} 来扩展父模板。子模板可以覆盖父模板中的块(block),并在这些块中插入自定义内容。
// www.javascriptcn.com code example
<!-- 父模板 base.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>
<header>
{% block header %}
默认头部内容
{% endblock %}
</header>
<main>
{% block content %}
默认内容
{% endblock %}
</main>
<footer>
{% block footer %}
默认底部内容
{% endblock %}
</footer>
</body>
</html>
<!-- 子模板 child.html -->
{% extends "base.html" %}
{% block title %}
子模板标题
{% endblock %}
{% block content %}
<p>这是子模板中的内容。</p>
{% endblock %}本题详细解读
1. 父模板与子模板的关系
在 Flask 中,模板继承是一种常见的代码复用方式。父模板定义了页面的基本结构,而子模板可以通过继承父模板来复用这些结构,并覆盖或扩展父模板中的特定部分。
2. {% extends %} 标签
{% extends %} 标签用于指定子模板继承的父模板。子模板中的所有内容都必须放在 {% block %} 标签中,否则这些内容将不会被渲染。
3. {% block %} 标签
{% block %} 标签用于定义可被覆盖的内容块。父模板中的块可以有默认内容,子模板可以通过定义同名块来覆盖这些默认内容。
4. 块的覆盖与扩展
子模板可以通过定义与父模板中同名的块来覆盖父模板中的内容。如果子模板没有定义某个块,则会使用父模板中的默认内容。
5. 多层继承
Flask 支持多层模板继承。例如,可以有一个基础模板 base.html,一个中间模板 middle.html 继承 base.html,然后一个子模板 child.html 继承 middle.html。每一层都可以覆盖或扩展上一层的块。
6. 示例解析
在上面的示例中,child.html 继承了 base.html,并覆盖了 title 和 content 块。因此,最终渲染的页面将使用子模板中的标题和内容,而头部和底部将使用父模板中的默认内容。
通过这种方式,Flask 的模板继承机制使得页面结构的复用和维护变得更加简单和高效。