推荐答案
在 Flask 中,模板中的块 (block) 是通过 {% block block_name %} 和 {% endblock %} 标签来定义的。块允许你在父模板中定义可替换的内容,子模板可以继承父模板并覆盖这些块。
// 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>// www.javascriptcn.com code example
<!-- child.html (子模板) -->
{% extends "base.html" %}
{% block title %}
子模板标题
{% endblock %}
{% block content %}
<p>这是子模板的内容。</p>
{% endblock %}本题详细解读
1. 块的定义与使用
在 Flask 的模板中,块是通过 {% block block_name %} 和 {% endblock %} 标签来定义的。块的作用是允许你在父模板中定义一些可替换的区域,子模板可以通过继承父模板并覆盖这些块来实现内容的定制。
2. 父模板与子模板
- 父模板:通常是一个基础模板,定义了页面的基本结构和一些默认内容。父模板中的块是子模板可以覆盖的区域。
- 子模板:通过
{% extends "base.html" %}继承父模板,并使用{% block block_name %}覆盖父模板中的相应块。
3. 块的继承与覆盖
- 继承:子模板通过
{% extends "base.html" %}继承父模板,这意味着子模板会使用父模板的整体结构。 - 覆盖:子模板可以通过定义与父模板中同名的块来覆盖父模板中的内容。如果子模板没有覆盖某个块,则会使用父模板中的默认内容。
4. 示例解析
- 在
base.html中,定义了title、header、content和footer四个块,并提供了默认内容。 - 在
child.html中,继承了base.html,并覆盖了title和content块,而header和footer块则保留了父模板中的默认内容。
通过这种方式,Flask 的模板系统提供了强大的继承和覆盖机制,使得页面结构的复用和定制变得非常灵活。