如何在不同文件中使用 render_template() 渲染多个块?

1 投票
1 回答
1870 浏览
提问于 2025-04-17 19:39

因为 Jinja2 有块(blocks)这个功能,可以把模板分成不同的文件,使用 {% block _name_ %}{% endblock %} 这样的语法,所以我觉得在 Flask 上实现这个应该挺简单的,但我就是搞不明白。

承诺

我有这样的结构:

daddy_template.html
    son.html
    daughter.html

所有的模板大致都有以下内容:

<!-- daddy_template.html -->
<div id="son">{% block son %}{% endblock %}</div>
<div id="daughter">{% block daughter %}{% endblock %}</div>

<!-- son.html -->
{% extends "daddy_template.html" %}
{% block son %}
<p>Knock, knock</p>
{% endblock %}

<!-- daughter.html -->
{% extends "daddy_template.html" %}
{% block daughter %}
<p>Who is it?</p>
{% endblock %}

转折

我知道在 Flask 中只有 render_template() 这个函数可以用来准备模板,它一次只能处理一个模板,所以这就只会使用函数参数中提供的那个块,其他的都被忽略了。

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def daddy():
    return render_template('son.html')

难题

那么,怎么才能两全其美呢?也就是说,如何在渲染时把 son.htmldaughter.html 都包含进 daddy_template.html 中呢?

1 个回答

5

看看这个include 语句,它比使用块要更好。

撰写回答