【问题标题】:How to pass items to loop using Jinja2/Flask?如何使用 Jinja2/Flask 将项目传递给循环?
【发布时间】:2014-02-05 15:39:47
【问题描述】:

我想传递一个页面列表并在 Jinja2 中循环显示我网站的所有页面。我使用 Flask 来构建和运行应用程序。我遵循了官方的烧瓶文档以及this tutorial。但是,当我尝试传递列表并尝试循环遍历它时,它不会出现在呈现的 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)

还有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>

当我运行应用程序并浏览到http://127.0.0.1:8000/ 时,我得到了以下信息:

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

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

</body>
</html>

【问题讨论】:

  • 有些不对劲。您的代码可以按照您的预期工作。启动应用程序后您是否更改了app.py?您需要重新加载它。我建议将debug=True 添加到您对app.run() 的呼叫中。
  • 代码运行正常,重启你的服务器
  • 我试用了您的应用程序,它运行良好,它将两个页面列表都打印到浏览器。重新加载应用程序或停止在后台同时运行的应用程序。
  • 另外,不相关,但请注意 HTML 标记的位置。您的 h1 出现在 body 标记之外。
  • @all!谢谢,重启服务器就行了……

标签: python list loops flask jinja2


【解决方案1】:

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

除此之外,在 Flask 中,您可以传递任何内置于 Python 中的类型,无论是 listdictionary 还是 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)

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。我使用 Sublime Text 3 并意识到我没有自动将制表符转换为空格。一旦我在用户设置中进行了更改并重新运行脚本,它就会正确输出列表。

    【讨论】:

      猜你喜欢
      • 2011-03-13
      • 2022-12-05
      • 2015-10-23
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多