我正在尝试并排渲染两个不同的表,它们在 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>
如果您无法更改为您提供表格的代码,您可以直接进行硬编码。 (这是一个非常糟糕的做法)
类似这样的:
{% 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'])
并使用这些新变量相应地更改模板。