You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需表单:Flask向HTML传递Pandas数据集的问题求助

Flask传递Pandas数据集到HTML的解决方案

一、基础渲染:直接路由传数据到模板

不需要GET/POST表单,直接在Flask路由里把Pandas数据转成HTML模板可遍历的格式,传给模板渲染即可。

示例代码

main.py

from flask import Flask, render_template
import pandas as pd

app = Flask(__name__)

def get_golf_rankings():
    # 模拟生成1000条高尔夫球手数据(替换成你的真实数据逻辑)
    data = {
        '排名': range(1, 1001),
        '球手姓名': [f'球手{i}' for i in range(1, 1001)],
        '积分': [round(90 - i*0.05, 2) for i in range(1, 1001)]
    }
    df = pd.DataFrame(data)
    # 转成字典列表,方便模板遍历
    return df.to_dict('records')

@app.route('/rankings')
def show_rankings():
    rankings = get_golf_rankings()
    # 将数据传递给模板
    return render_template('WGRankings.html', rankings=rankings)

if __name__ == '__main__':
    app.run(debug=True)

WGRankings.html

<!DOCTYPE html>
<html>
<head>
    <title>高尔夫球手排名</title>
    <style>
        table { border-collapse: collapse; width: 80%; margin: 20px auto; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: center; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <h1 style="text-align: center;">高尔夫球手排名</h1>
    <table>
        <thead>
            <tr>
                <th>排名</th>
                <th>球手姓名</th>
                <th>积分</th>
            </tr>
        </thead>
        <tbody>
            {% for golfer in rankings %}
            <tr>
                <td>{{ golfer['排名'] }}</td>
                <td>{{ golfer['球手姓名'] }}</td>
                <td>{{ golfer['积分'] }}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
</body>
</html>

二、实现动态刷新(无需硬编码)

针对1000条数据的动态更新需求,提供两种方案:

方法1:页面定时全量刷新

在HTML的<head>标签中添加一行代码,让页面每隔指定秒数自动刷新:

<meta http-equiv="refresh" content="30"> <!-- 30秒刷新一次,可自定义时间 -->

这种方式简单直接,适合对页面流畅度要求不高的场景。

方法2:AJAX异步局部刷新(更流畅)

无需刷新整个页面,仅更新排名表格区域,体验更好。

修改main.py,新增API路由返回JSON数据

@app.route('/api/rankings')
def get_rankings_api():
    rankings = get_golf_rankings()
    return {'rankings': rankings}

修改WGRankings.html,用JavaScript定时请求API更新表格

<!DOCTYPE html>
<html>
<head>
    <title>高尔夫球手排名</title>
    <style>
        table { border-collapse: collapse; width: 80%; margin: 20px auto; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: center; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <h1 style="text-align: center;">高尔夫球手排名</h1>
    <table id="rankings-table">
        <thead>
            <tr>
                <th>排名</th>
                <th>球手姓名</th>
                <th>积分</th>
            </tr>
        </thead>
        <tbody id="rankings-body">
            <!-- 初始数据由模板渲染,后续由JS更新 -->
            {% for golfer in rankings %}
            <tr>
                <td>{{ golfer['排名'] }}</td>
                <td>{{ golfer['球手姓名'] }}</td>
                <td>{{ golfer['积分'] }}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>

    <script>
        // 刷新排名数据的函数
        function refreshRankings() {
            fetch('/api/rankings')
                .then(response => response.json())
                .then(data => {
                    const tbody = document.getElementById('rankings-body');
                    tbody.innerHTML = ''; // 清空原有内容
                    // 遍历新数据生成表格行
                    data.rankings.forEach(golfer => {
                        const row = document.createElement('tr');
                        row.innerHTML = `
                            <td>${golfer['排名']}</td>
                            <td>${golfer['球手姓名']}</td>
                            <td>${golfer['积分']}</td>
                        `;
                        tbody.appendChild(row);
                    });
                })
                .catch(error => console.error('获取数据失败:', error));
        }

        // 每30秒执行一次刷新(可自定义时间,单位毫秒)
        setInterval(refreshRankings, 30000);
    </script>
</body>
</html>

三、关键提示

  • Pandas的to_dict('records')方法可将DataFrame转为[{列1:值1, 列2:值2}, ...]的格式,完美适配Jinja2模板遍历或JSON传输。
  • 浏览器端直接用原生fetch API即可,无需pyfetch,和Flask路由完全兼容。
  • 若1000条数据加载过慢,可在模板中实现分页逻辑,或前端使用虚拟滚动优化渲染性能。

内容的提问来源于stack exchange,提问作者ASavage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:45:40