首页 > 解决方案 > 烧瓶包含带有变量的模板

问题描述

只是好奇为什么会这样,因为在烧瓶和 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>

vscode中的代码示例

标签: templatesflaskinclude

解决方案


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

我们可以在 jinja 结构中的另一个模板中包含一个模板。这样做时我们不必使用“for”。

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

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

推荐阅读