【问题标题】:flask include template with variable烧瓶包含带有变量的模板
【发布时间】:2021-06-11 03:23:02
【问题描述】:

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

【问题讨论】:

    标签: templates flask include


    【解决方案1】:

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

    包括

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

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

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

    【讨论】:

    • 感谢您的友好回答! “默认情况下,包含的模板访问活动上下文的变量。”这就是我想知道的!
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多