烧瓶包括带有变量的模板

时间:2021-06-11 03:23:02

标签: templates flask include

只是好奇为什么这有效,因为在flask和jinjia2官方文档中没有找到这样的例子。似乎include只是简单地将内容原封不动地放在那里,对吗?

# app.py
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    names = ['John', 'James', 'Jenny']
    return render_template('index.html', names=names)


if __name__ == '__main__':
    app.run(port=5200)
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home</title>
</head>
<body>
    Welcome!

    <!-- I know this is working as official docs -->
    {% for name in names %}
        <div class='card'>Welcome {{ name }}!</div>
    {% endfor %}

    <!-- but haven't found any examples like below, but it works -->
    {% for name in names %}
        {% include "card.html" %}
    {% endfor %}
    
</body>
</html>
<!-- card.html -->
<div class='card'>Welcome {{ name }}!</div>

code example in vscode

2 个答案:

答案 0 :(得分:0)

这段代码会起作用,因为在“for”循环的每一步都会重新加载cards.html。

我们可以在 jinja 结构中的另一个模板中包含一个模板。执行此操作时,我们不必使用“for”。

要在“for”循环中导航的列表元素是从flask 视图呈现的。这样,我们就可以在渲染时在指定的模板中随意使用渲染后的列表及其元素了。

    {% for name in names %}
        {% include "card.html" %}
    {% endfor %}

答案 1 :(得分:0)

来自https://jinja.palletsprojects.com/en/3.0.x/templates/

<块引用>

包括

include 标签可用于包含模板并返回 将该文件的内容渲染到当前命名空间中:

{% 包含 'header.html' %} 正文 {% 包含 'footer.html' %}

包含的模板可以访问活动上下文的变量 默认情况下。

相关问题