在HTML内部使用Python并行迭代多个列表(Flask)

Ron*_*nan 5 html python loops flask pythonanywhere

我建立托管在一个python web应用程序pythonanywhere下面这个教程松散.我正在修改生成的应用程序以符合我自己的目标.

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

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'))
Run Code Online (Sandbox Code Playgroud)

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

{% for review in reviews %}
    <tr>
        <td></td>
        <td>{{ review }}</td>
        <td></td>
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

然而,这是有效的,我试图遍历多个列表,并发现各种语句说zip函数是我正在寻找的所以我将我的HTML代码更改为以下段,它不再有效.

{% for review, product in zip(reviews, productname) %}
    <tr>
        <td>{{ product }}</td>
        <td>{{ review }}</td>
    <td></td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

从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) %}
Run Code Online (Sandbox Code Playgroud)

我如何让它工作?

任何帮助表示感谢,谢谢.

Dav*_*avy 5

zip()是python函数,不是以Flask(Jinja2)的模板语言执行的函数。

因此,在视图中应用zip()并将结果传递给模板:

return render_template("main.html", reviews_products=zip(reviews, productnames))
Run Code Online (Sandbox Code Playgroud)

然后应用此技巧: 如何遍历 模板中jinja中的列表列表