如何在不同文件中使用 render_template() 渲染多个块?
因为 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.html
和 daughter.html
都包含进 daddy_template.html
中呢?