Таблица Flask показывает только первую строку из списка Python, для цикла, не работающего со строками

#python #python-3.x #flask #html-table

Вопрос:

Здесь новичок. У меня есть проблема, которая меня расстраивает. У меня есть таблица колб, которая должна отображать список из python, но она отображает только первую строку в списке python.

Вот как выглядит вывод списка python, когда я запускаю сценарий py в коде visual studio.

 [('location 123', 'Hello Street', 'Los Angeles', 1.0, 40, 3, '2021-08-28T02:28:21.000000Z')]
[('location xyz', 'Beta Rd', 'Burlington', 1.0, 40, 2, '2021-08-28T00:30:36.000000Z')]
[('location abc', 'Alpha Ave', 'Seattle', 1.0, 40, 0, '2021-08-25T03:53:26.000000Z')]
 

Строки являются динамическими, поэтому не в каждом списке будет заданное количество.

Первая строка выглядит правильной, вместе с заголовками, и все выстраивается в ряд. Но я не могу заставить появиться дополнительные строки.

вот это main.py строка, задающая выходные данные

 return render_template("result.html", headings=headings, output=city_details())
 

вот мой result.html файл

   <body>
  
    <h1>Results</h1>

    <table class="table">
      <tr class="table__header">
        {% for header in headings %}
        <th class="table__cell">{{ header }}</th>
        {% endfor %}
      </tr>

      {% for row in output %}
      <tr class="table__row">
        {% for cell in row %}
        <td class="table__cell">{{cell}}</td>
        {% endfor %}
      </tr>
      {% endfor %}
    </table>
  </body>
 

Вот часть скрипта python, которая задает список

 for details in data:
   location = details['location']
   street = details['street']
   city = details['city']
   scale = details['scale']
   etc...
   city_details = location, street, city, scale
   total_details = [city_details]
   return total_details
 

У кого-нибудь есть идеи, что не так с моей таблицей для цикла? Или мой список составлен неправильно? Я предполагаю, что это что-то действительно простое, что я упускаю из виду, но я не могу этого понять и сводлю себя с ума.

Заранее спасибо.

Ответ №1:

Предполагая, что вы намерены обработать все детали в данных, его цикл завершается рано.

 for details in data:
    ...
    return total_details
 

Ответ №2:

Фрагмент вашего кода, который вы показали, эквивалентен

 details = data[0]
location = details['location']
street = details['street']
city = details['city']
scale = details['scale']
# ... any additional processing ...
city_details = location, street, city, scale
total_details = [city_details]
return total_details
 

потому что вы сделали безусловный возврат внутри цикла.

Я бы написал отдельную функцию, которая превращается details в city_details , а затем использует понимание списка:

 # earlier in your code, add this top-level function:
def make_table_row(details):
    location = details['location']
    street = details['street']
    city = details['city']
    scale = details['scale']
    # ... any additional processing ...
    return location, street, city, scale

# replace your original loop with this:
return [make_table_row(details) for details in data]