Как отобразить значения из одной и той же позиции индекса из нескольких списков Python, в одну строку, в HTML, используя Jinja 2? - PullRequest
1 голос
/ 24 апреля 2019

Таким образом, для задания мне было поручено создать программу, которая отображает информацию о поездах в реальном времени на основе данных, введенных пользователем (станция, с которой они хотят идти, станция, на которую они хотят идти, дата и время).Когда эта информация собрана и проанализирована в API, я собираю такие данные, как номер платформы, время отправления, железнодорожная компания и т. Д., И помещаю каждое значение в свой собственный список в своей собственной позиции индекса (например, каждый номер платформы будетвойдите в список с именем platformnumber, в его собственной позиции ['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 '] [«Юго-Западная железная дорога», «Юго-Западная железная дорога», «Юго-Западная железная дорога», «Юго-Западная железная дорога», «Юго-Западная железная дорога», «Юго-Западная железная дорога»] Услуга «Лондон Ватерлоо».

1 Ответ

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

Таким образом, вы можете использовать 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...