在 Jinja 中选择 for 循环内的元素

问题描述 投票:0回答:1

我正在尝试并排渲染两个不同的表,它们在 Flask 中作为数据帧一起传递

return render_template('rankings.html', tables=[df1.to_html(index=False, classes='data'), df2.to_html(index=False, classes='data')], titles=['hof','recent'])

由于下面的 Jinja 模板没有指定在每个 for 循环中渲染哪个表,因此它会渲染两个表,第一个表堆叠在第二个表的顶部。

理想情况下,我只在第一个表中呈现第一个数据帧,在第二个表中呈现第二个数据帧。

我正在寻找一种方法来迭代 for 循环中的项目。

table[1] 和 table.1 通常都只给我“t”(table[2] 给出“a”,table[3] 给出“b”等),所以迭代不起作用,或者我在这里做错事了。

我意识到还有其他(并且可能更好)完全避免 for 循环的方法,但由于我对 Jinja 相对较新,我正在努力想出一些可行的方法 - 非常感谢任何帮助。

我的 Jinja 模板的简化版本如下。

<html> 
<head>
<title>Test</title> 
<style>
.tab {
display: inline-block;
margin-left: 4em;
}
body {
background-image: linear-gradient(to bottom right, red, white);
}
.column {
display:inline-block;
width:50%;
float:left;
}
</style>
</head> 
<body><center>
<div class="column"><p><h2>Hall of fame</h2></p>{% for table in tables %}{{ table|safe }}{% endfor %}</div>
<div class="column"><p><h2>Most recent</h2></p>{% for table in tables %}{{ table|safe }}{% endfor %}</div>   
</center></body>
</html>
python flask jinja2
1个回答
0
投票

如果您无法更改为您提供表格的代码,您可以直接进行硬编码。 (这是一个非常糟糕的做法)

类似这样的:

{% for table in tables[:1] %} # For HoF
{% for table in tables[1:2] %}  # For Most recent

但是,如果您要更改桌子的数量,甚至它们的位置 - 可能会破坏您的响应。

不过,我相信首选解决方案是将这些表作为两个单独的属性传递。

类似:

return render_template('rankings.html', hof_table=df1.to_html(index=False, classes='data'), most_recent_table=df2.to_html(index=False, classes='data'), titles=['hof','recent'])

并使用这些新变量相应地更改模板。

© www.soinside.com 2019 - 2024. All rights reserved.