Как отображать значения из одной и той же позиции индекса из нескольких списков python в 1 строке в HTML с помощью Jinja 2?

Итак, для задания мне было поручено создать программу, которая отображает информацию о поезде в реальном времени на основе данных, введенных пользователем (станция, с которой он хочет отправиться, станция, на которую он хочет пойти, дата и время). Когда эта информация собирается и анализируется в API, я беру такие данные, как номер платформы, время отправления, железнодорожная компания и т. д., и помещаю каждое значение в свой собственный список в своей позиции индекса (например, каждый номер платформы будет перейти в список под названием номер_платформы в своей собственной позиции ['2', '12', '4']).

Как только у меня есть все эти данные в списках, из-за того, как я их запрограммировал, все данные с индексом [0] во всех списках совпадают вместе, то же самое с индексом [1] и так далее. Моя проблема в том, что мне нужно, чтобы эти данные отображались на моей HTML-странице, при этом каждый поезд показывал номер платформы, имя оператора и время отправления на своей СОБСТВЕННОЙ линии. Ниже приведен код, который у меня есть, и скриншот того, как далеко я продвинулся.

Мне удалось продвинуться так далеко, прокручивая список платформ и создавая новый абзац для каждой платформы (всегда будет столько же платформ, сколько и поездов), что хорошо, потому что у меня есть нужное количество строк, которые мне нужны. Однако, поскольку остальные мои данные также находятся в списках, я не могу просто добавлять циклы внутри циклов, чтобы получить данные. Это моя проблема.

Ниже приведен код, который я использую для хранения значений из API в списках. Это сохраняет данные каждого поезда в своей собственной позиции индекса в каждом списке (скажем, все данные первого поезда будут в индексе 0 каждого списка). (некоторые из переменных здесь вы можете игнорировать, поскольку они не имеют отношения к этой проблеме)

        date = parsed["date"]
        stationname = parsed["station_name"]
        time = parsed["time_of_day"]
        departures = parsed["departures"]
        platformnumber = []
        destinationstation = parsed["departures"]["all"][0]["destination_name"]
        operatorname = []
        departuretime = []
        trainuid = []

        for i in departures["all"]:
            for k, v in i.items():
                if k == "platform":
                    platformnumber.append(v)
                elif k == "aimed_departure_time":
                    departuretime.append(v)
                elif k == "operator_name":
                    operatorname.append(v)
                elif k == "train_uid":
                    trainuid.append(v)

return render_template('timetable.html', date=date, station=stationname, time=time, destination=destinationstation, operator=operatorname,departuretime=departuretime, platform=platformnumber, liveoperatorname=liveoperatorname, livedeparturetime=livedeparturetime, liveplatformnumber=liveplatformnumber, livedestination=livedestination, callingat=destination)

Вот мой код Jinja 2/HTML, который у меня есть. Надеюсь, вы видите, что я пытаюсь сделать, и почему я застреваю.

{% for a in platform %}
    <li>Platform {{a}} For The {{departuretime}} {{operator}} Service To {{destination}}</li>
    {% endfor %}

Я хочу, чтобы для каждого поезда была строка, похожая на:

Платформа 12 для отправления Юго-Западной железной дороги в 14:25 до Лондона Ватерлоо.

Но вместо этого он отображается так, так как я не знаю, как получить данные из других списков (строка ниже напечатана для количества платформ, которые есть в списке, что совпадает с количеством поездов, поскольку каждый поезд имеет платформа).

Платформа 2 Для ['12:22', '12:59', '13:05', '13:22', '13:59', '14:05'] ['Юго-Западная железная дорога', 'Южная Западная железная дорога», «Юго-Западная железная дорога», «Юго-Западная железная дорога», «Юго-Западная железная дорога», «Юго-Западная железная дорога»] Служба в Лондон Ватерлоо.


person Lxk3y    schedule 24.04.2019    source источник


Ответы (1)


Как и вы, вы можете использовать loop.index для получения индекса текущего цикла. Будьте осторожны, потому что он начинается с 1, а не с 0. Тогда вам нужно сделать my_list[loop.index-1]

Ваш шаблон Jinga2 должен выглядеть так:

{% for a in list_a %}
    <li>Platform {{a}} For The {{list_b[loop.index-1]}} and {{list_c[loop.index-1]}}</li>
{% endfor %}

Но лучшим решением будет использование другого дизайна. Вам не нужно создавать 2, 3 или 4 списка. Вы можете просто создать таблицу (список списка). Это выглядит так:

information = [
    ["plaform A", "departure A", ...],
    ["plaform B", "departure B", ...],
]

Затем в вашем шаблоне Jinja2 вы можете просто получить доступ к своей таблице следующим образом:

{% for platform, departure, ... in information %}
    <li>Platform {{platform}} For The {{departure}}</li>
{% endfor %}
person Victor    schedule 24.04.2019