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

Vue.js 无法渲染 Flask 后端返回数据对应 HTML 页面的问题咨询

问题原因

你当前的问题核心是路由功能混淆:原代码中根路由/仅负责返回JSON格式的图表数据,自然不会渲染前端页面;你修改后直接将数据返回逻辑和页面渲染逻辑揉在同一个路由中,又错误地将jsonify()返回的响应对象直接传入模板,导致前端发起请求时无法拿到正确的JSON格式数据,因此读不到labels和datasets的值。

正确实现步骤

1. 调整项目目录结构

Flask默认会从根目录下的templates文件夹读取模板文件,先按如下结构整理文件:

项目根目录/
├── app.py # Flask后端启动文件
├── test_data.csv # 生成的测试数据集
└── templates/
    └── index.html # 你的前端HTML代码

2. 修改后端路由,拆分页面接口和数据接口

修改Flask代码,拆分两个独立路由分别处理页面返回和数据查询:

from flask import Flask, request, jsonify, render_template
from flask_cors import CORS
import pandas as pd

app = Flask(__name__)
CORS(app)

# 根路由专门负责返回前端HTML页面
@app.route('/')
def index():
    return render_template('index.html')

# 新增独立接口专门返回图表数据
@app.route('/api/chart-data')
def get_chart_data():
    offset = request.args.get('offset', default = 1, type = int)
    limit = request.args.get('limit', default = 1, type = int)
    df = pd.read_csv('test_data.csv', skiprows=range(1, offset+1), nrows=limit, parse_dates=['X'])

    cols = [col for col in df.columns if col.startswith('Y')]

    configs = {
        'Y1': {'color': '#483D8B', 'col_name': 'name_Y1'},
        'Y2': {'color': '#f87979', 'col_name': 'name_Y2'},
        'Y3': {'color': '#00BFFF', 'col_name': 'name_Y3'},
    }

    datasets = []
    for k, c in enumerate(cols):
        datasets.append({
            'label': configs[c]['col_name'],
            'borderColor': configs[c]['color'],
            'backgroundColor': configs[c]['color'],
            'borderWidth': 2,
            'pointBorderColor': '#000000',
            'lineTension': k*0.23,
            'pointRadius': 2,
            'pointBorderWidth': 1,
            'fill': False,
            'data': df[c].tolist()
        })

    chart = {
        'labels': df['X'].dt.strftime('%H:%M:%S').tolist(),
        'datasets': datasets
    }

    return jsonify({'chart_data': chart})

app.run()

3. 修改前端请求地址

找到Vue代码中的数据请求行,将请求地址修改为新增的数据接口:

// 原来的代码
Vue.http.get('http://127.0.0.1:5000/?limit=' +limit+ '&offset=' +offset)
// 修改为
Vue.http.get('/api/chart-data?limit=' +limit+ '&offset=' +offset)

验证操作

启动Flask服务后直接访问http://127.0.0.1:5000即可加载前端页面,页面加载完成后会自动拉取数据渲染实时图表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:03