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

Flask集成Tradingview时如何存储CSV供Python与前端JS读取

问题描述

我是编程新手,首次在Stack Overflow提问,若问题存在疏漏敬请谅解。
我正基于Python Flask搭建网站,计划集成Tradingview图表功能。我已编写承载Tradingview图表的HTML页面(包含相关JavaScript逻辑),通过Flask(Python)框架启动Web服务。
目前已完成Flask应用渲染HTML页面的基础配置,但运行时前端无法访问存储股票行情数据的CSV文件,导致图表无法正常加载。相关代码与报错信息如下:

Flask 代码

from flask import Flask, redirect, url_for, render_template

app = Flask(__name__)

@app.route("/")
def home():
    return render_template("index.html")

if __name__ == "__main__":
    app.run()

HTML 代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="tvchart"></div>
</body>
<script src="https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js"></script>
<script src="static/js/index.js"></script>
</html>

JavaScript 代码

const getData = async () => {
  const res = await fetch('static/js/data2.csv');
  const resp = await res.text();
  //   console.log(resp);
  const cdata = resp.split('\n').map((row) => {
    const [time1, time2, open, high, low, close] = row.split(',');
    return {
      time: new Date(`${time1}, ${time2}`).getTime() / 1000,
      open: open * 1,
      high: high * 1,
      low: low * 1,
      close: close * 1,
    };
  });
  return cdata;
  //   console.log(cdata);
};

// getData();

const displayChart = async () => {
  const chartProperties = {
    width: 1500,
    height: 600,
    timeScale: {
      timeVisible: true,
      secondsVisible: true,
    },
  };

  const domElement = document.getElementById('tvchart');
  const chart = LightweightCharts.createChart(domElement, chartProperties);
  const candleseries = chart.addCandlestickSeries();
  const klinedata = await getData();
  candleseries.setData(klinedata);
};

displayChart();

运行报错信息

* Serving Flask app "stockstarapp" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [26/Jun/2022 14:42:36] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [26/Jun/2022 14:42:37] "GET /data2.csv HTTP/1.1" 404 -

解决方案

报错核心原因是静态资源路径解析错误,Flask默认从项目根目录下的static文件夹读取静态资源,当前JS里写的相对路径在页面加载时被解析成了根路径下的/data2.csv,没有匹配到正确的静态资源位置,所以返回404。
按下面两步修改即可:

  • 调整项目目录结构,把CSV文件放到Flask可识别的静态资源路径下,标准目录结构参考:
    你的项目根目录/
    ├── app.py  # 你的Flask启动文件
    ├── templates/
    │   └── index.html
    └── static/
        └── js/
            ├── index.js
            └── data2.csv  # 确认CSV文件放在这个位置
    
  • 修改JS中fetch请求的路径,把相对路径改成Flask识别的绝对静态路径,避免相对路径解析偏差:
    // 把原来的 fetch('static/js/data2.csv') 改成下面这行
    const res = await fetch('/static/js/data2.csv');
    

修改完成后重启Flask服务,前端就能正常读取到CSV数据加载图表了。

补充注意点:如果CSV文件存在表头行,解析的时候要跳过第一行,不然会把表头转成NaN导致图表渲染异常,可以在split后加slice处理:

const cdata = resp.split('\n').slice(1).map((row) => {
  // 原有解析逻辑不变
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:18:15