【问题标题】:Iterating multiple lists in parallel with Python inside HTML (Flask)在 HTML(Flask)中与 Python 并行迭代多个列表
【发布时间】:2018-10-04 18:09:36
【问题描述】:

我正在构建一个托管在pythonanywhere 上的python 网络应用程序,松散地遵循这个tutorial。我正在修改生成的应用程序以适应我自己的目标。

这是我用来将变量传递给 HTML 文档以便使用 for 循环将它们添加到表中的 Python 代码:

from flask import Flask, redirect, render_template, request, url_for

app = Flask(__name__)
app.config["DEBUG"] = True

productnames = []
reviews = []

@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "GET":
    return render_template("main.html", reviews=reviews, productnames=productnames)

reviews.append(request.form["review"])
productnames.append(request.form["products"])
return redirect(url_for('index'))

在我的 HTML 中使用以下代码,我正在遍历该列表并将每个项目添加到表中:

{% for review in reviews %}
    <tr>
        <td></td>
        <td>{{ review }}</td>
        <td></td>
    </tr>
{% endfor %}

这可行,但是,我试图遍历多个列表,发现各种语句说 zip 函数是我正在寻找的,所以我将我的 HTML 代码更改为以下部分,但它不再有效。

{% for review, product in zip(reviews, productname) %}
    <tr>
        <td>{{ product }}</td>
        <td>{{ review }}</td>
    <td></td>
</tr>
{% endfor %}

从 python 任何地方,错误页面显示“错误代码:未处理的异常”,并且通过 pythonanywhere 仪表板的错误日志显示:

2018-04-24 12:57:23,957:   File "/home/FdScGroup/cloudapp/templates/main.html", line 43, in top-level template code
2018-04-24 12:57:23,957:     {% for review, product in zip(reviews, productnames) %}

如何让它工作?

感谢您的帮助。

【问题讨论】:

  • 每个产品是否有一条评论?
  • 我会提出的一个建议是将zip(reviews, productname) 分配给一个模板变量(比如product_reviews)并对其进行迭代,而不是在模板中包含这个逻辑。我不确定 Flask 模板,但 Django 模板语言旨在最大限度地减少模板中的这种逻辑。
  • @bphi 是的,每行表格一条评论,以及产品名称。如果单个产品有多个评论,它们仍将位于不同的行上,只是在对面的列中具有相同的产品名称。
  • 我同意@benwad 并建议您使用字典,然后您可以使用{% for key, value in product_reviews.iteritems() %} 这样您可以有多个评论值,即值可以是一个列表
  • @benwad 我不确定我是否清楚,你能解释一下吗?我是 Python/Flask 的新手。

标签: python html loops flask pythonanywhere


【解决方案1】:

zip()是一个python函数,不是Flask(Jinja2)模板语言中要执行的函数。

所以在视图中应用 zip() 并将结果传递给模板:

return render_template("main.html", reviews_products=zip(reviews, productnames))

然后应用这个技巧: how to iterate over a list of list in jinja 在模板中。

【讨论】:

  • 非常感谢,如果一切顺利,我将对其进行测试,然后再将其标记为正确!
猜你喜欢
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 2014-03-21
  • 2013-10-07
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多