如何使用Jinja2/Flask将项目传递给循环?

mcb*_*etz 6 python loops list jinja2 flask

我想传递一个页面列表并在Jinja2中循环它以显示我网站的所有页面.我使用Flask构建并运行应用程序.我跟着官方的烧瓶文档,以及本教程.但是,当我尝试传递列表并尝试循环它时,它不会出现在渲染的html中.

我究竟做错了什么?如何正确传递列表并使用base.html模板循环它?

这是我的代码,其中包含一个硬编码的虚拟页面列表:

app.py:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    page_list = ['Eins', 'Zwei']
    return render_template('base.html', pages=page_list)


if __name__ == "__main__":
    app.run(port=8000)
Run Code Online (Sandbox Code Playgroud)

并且base.html,位于/templates/:

<html>
<head>
<title>Test</title>
</head>

<body>
<h1>All the nice pages</h1>
{% for page in pages %}
<p>{{ page }}</p>
{% endfor %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序并浏览到时http://127.0.0.1:8000/,这就是我得到的:

<html>
<head>
<title>Test</title>
</head>

<h1>All the nice pages</h1>
<body>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

mcb*_*etz 2

该代码完全有效。重要的是如果您对列表或字典进行更改,请重新启动服务器。

除此之外,在 Flask 中,您可以传递 Python 中内置的任何类型,无论是 a list、 adictionary还是 a tuple

以下是传递或多或少相同内容的每种类型的简短示例:

from flask import Flask, render_template

adictionary = {'spam': 1, 'eggs': 2}
alist = ['Eins', 'Zwei', 'Drei']
atuple = ('spam', 'eggs')

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('base.html', pages=alist)


@app.route('/tuple/')
def tuple():
    return render_template('base.html', pages=atuple)


@app.route('/dict/')
def adict():
    return render_template('base.html', pages=adictionary)

if __name__ == "__main__":
    app.run(port=8000)
Run Code Online (Sandbox Code Playgroud)