Итерация нескольких списков параллельно с Python внутри HTML (Flask) - PullRequest
0 голосов
/ 24 апреля 2018

Я создаю веб-приложение на Python, размещенное на pythonanywhere , следуя этому учебнику свободно. Я изменяю полученное приложение, чтобы соответствовать моей собственной цели.

Вот мой код Python, который я использую для передачи переменных в документ HTML, чтобы их можно было добавить в таблицу с помощью цикла 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'))

Используя следующий код в моем 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) %}

Как мне заставить это работать?

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 24 апреля 2018

zip () - это функция Python, а не функция, которая должна выполняться на языке шаблонов Flask (Jinja2).

Поэтому примените zip () в представлении и передайте результат в шаблон:

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

Затем примените этот трюк: как перебрать список в jinja в шаблоне.

...