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

Django中使用Chart.js绘制图表坐标异常且出现多余点位问题咨询

问题原因

导致你遇到渲染错误、点位不符、异常新增点位的核心原因有三个:

    1. main_graph_points被错误定义为字符串类型
      你在代码中添加了外层双引号:var main_graph_points = "{{ main_graph_points }}";,这会让Django渲染后的字典内容变成普通字符串。此时Object.keys(main_graph_points)返回的是字符串每个字符对应的索引(0、1、2……),Object.values返回的是每个单个字符,完全不符合你的预期数据,这是点位不符的核心原因。
    1. 大量错误点位导致渲染卡顿,看起来像点位持续新增
      你传入的字典转成字符串后长度达数百位,生成的错误点位有上百个,Chart.js渲染这些点位需要较长时间,看起来就像点位在不停凭空新增,直到所有错误点位渲染完成或者你终止进程。
    1. Django模板默认转义、配置项位置错误
      就算去掉外层引号,Django默认会对输出内容做HTML转义,同时你的options配置被错误放在了data字段内部,坐标轴配置不会生效。

修复方案

后端修改(Django视图层)

先把字典序列化为JSON字符串再传入模板:

import json

def your_view_func(request):
    # 你的原始点位字典
    main_graph_points = {20: 59.96601343154907, 24: 59.89738027254739, 28: 59.9285344282786,288: 59.849180777867616}
    return render(request, "你的模板文件名.html", context={
        "main_graph_points_json": json.dumps(main_graph_points)
    })

前端代码修改

替换原有main_graph_points定义,修正配置项位置:

// 替换原有变量定义,加safe过滤器禁用Django转义后解析为JS对象
var main_graph_points = JSON.parse('{{ main_graph_points_json|safe }}');

var graphData = {
    type: 'line',
    data: {
        labels: Object.keys(main_graph_points),
        datasets: [{
            label: 'main graph',
            data: Object.values(main_graph_points),
            backgroundColor: [
                'rgba(73, 198,230, 0.5)',
            ],
            borderWidth: 1
        }]
    },
    // options移到和type、data平级的位置
    options:{
        scales: {
            xAxes: [{
                type: 'category',
            }]
        }
    },
}

var myChart = new Chart(ctx, graphData);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:27:03