使用 Python 的动态表

新手上路,请多包涵

我正在开发一个小网站,它必须从 API 获取一些数据并将其显示在表格中(我不知道我需要多少行,这取决于 API)。我选择 Python 作为后端编程语言,并选择 Flask 作为网络框架。我需要在页面开始时从 Python 向 API 发出请求,并将其结果显示在 HTML 模板的表格中。带有一些参数的 render_template 不能这样做——因为它不能动态显示 HTML 元素,只能显示文本。如果没有 JS/JQuery 或最少地使用它,我怎么能做到这一点?这是我的表格代码(它是 Bootstrap 4)

 <table class="table table-bordered" id="users">
  <thead>
    <tr>
      <th>ID</th>
      <th>Имя</th>
      <th>Фамилия</th>
      <th>Действие</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td rowspan="1">3319</td>
      <td>...</td>
      <td>...</td>
      <td><a href="#">Выбрать</a></td>
  </tbody>
</table>

原文由 crinny 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 414
2 个回答

使用 Jinja2 时,您可以使用 Jinja2 的脚本可能性动态创建表,其语法与 Python 非常相似:

 <table>
 <thead>
  {%- for column in columns %}
     <th>{{ column }}</th>
  {%- endfor %}
 </thead>

 <tbody>
 {%- for row in items %}
    <tr>
    {%- for column in columns %}
       <td>{{ row|attr(column) }}</td>
    {%- endfor %}
    </tr>
 {%- endfor %}
 </tbody>
 </table>

在调用 render_template 时,您需要提供两个变量“columns”,其中包含行的列列表和“items”,其中包含行。

无需使用 JS。

如果你想支持一些特殊的数据类型,比如链接,你可以通过在模板中使用 if 语句来实现。

更多细节参见Jinja2参考:http: //jinja.pocoo.org/docs/2.10/templates/

原文由 Juergen 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可能也对这种模式感兴趣,使用 python 包 pandas:

 import pandas as pd

@app.route('/table')
def display_table():
    # do something to create a pandas datatable
    df = pd.DataFrame(data=[[1,2],[3,4]])
    df_html = df.to_html()  # use pandas method to auto generate html
    return render_template('page.html', table_html=df_html)

然后在 page.html 中包含以下内容:

 {{ table_html | safe }}

您需要包含 安全 过滤器,以便它在不转义任何字符的情况下呈现原始 html。

这将呈现以下内容,您还可以使用 pandas 中可用的参数和 Styler 对其进行样式化。

 <table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>0</th>
<th>1</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>1</td>
<td>2</td>
</tr>
<tr>
<th>1</th>
<td>3</td>
<td>4</td>
</tr>
</tbody>
</table>

编辑:仅供参考,这对于复杂或动态条件格式的问题也很方便,在 python/pandas 服务器端更容易设置样式,而不必担心 html 模板。当然,这取决于你在做什么,但我认为这在某些情况下更易于维护——比如我的!

原文由 Attack68 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏