如何使用Jinja 2在HTML中显示多个python列表中同一索引位置的值(1行)?

2024-05-29 08:05:50 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,对于一项任务,我的任务是建立一个程序,根据用户输入的数据(他们想去的车站、他们想去的车站、日期和时间)显示实时列车信息。当收集这些信息并将其解析为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)

这是我到目前为止得到的Jinja2/HTML代码。希望你能看到我在努力做什么,以及为什么我会陷入困境

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

我想要的是每列火车都有一条线,看起来像:

14:25西南铁路到伦敦滑铁卢的12号站台

但是它显示为这样,因为我不知道如何从其他列表中获取数据(下一行是针对列表中的站台数量打印的,这与列车数量相同,因为每列列车都有一个站台)

前往伦敦滑铁卢的['12:22'、'12:59'、'13:05'、'13:22'、'13:59'、'14:05']['西南铁路'、'西南铁路'、'西南铁路'、'西南铁路'、'西南铁路']服务的2号站台


Tags: 数据列表数量datetime时间parseddestination
1条回答
网友
1楼 · 发布于 2024-05-29 08:05:50

您可以使用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 %}

相关问题 更多 >

    热门问题