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

如何通过Django传递固定值生成12元素JS数组以绘制图表水平线?

如何在Django中生成重复12次的固定值列表并传递给JS图表?

问题描述

我有一段用于HTML图表曲线的JS代码:

data: [40, 60, 30, 65, 60, 95, 90, 100, 96, 120, 105, 134]

现在需要绘制一条由Django传递的固定值重复12次的水平线(示例值为100),但尝试了两种方法都失败:

  • Django端写limit = [mylimit for i in range(1,12)],JS端写data: {{ limit }}
  • Django端手动拼接字符串limit = f"{limit}, {limit}, ....",JS端写data: [{{ limit }}]

我的目标是根据获取到的任意limit值,生成类似data: [100, 100, 100.....]的JS代码。

完整JavaScript代码如下:

// sales analytics Chart
let situationSocieteChart = {
    labels: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jun", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"],
    legend: true,
    lineTension: .4,
    ticksValue: 'k',
    ticksColor: '#9CA3AF',
    ticksFontSize: 11,
    ticksFontWeight: 100,
    gridBorderDash: [8, 4],
    maxTicksLimit: 10,
    xAxis: true,
    gridColorX: NioApp.Colors.white,
    gridColorY: NioApp.Colors.gray100,
    gridBorderColorX: NioApp.Colors.white,
    gridBorderColorY: NioApp.Colors.white,
    datasets: [
        {
            borderWidth: 3,
            color: NioApp.Colors.yellow,
            backgroundGradient: NioApp.Colors.yellow,
            pointBorderColor: 'transparent',
            pointBackgroundColor: 'transparent',
            pointHoverBackgroundColor: NioApp.Colors.yellow,
            label: "Transactions",
            data: [40, 60, 30, 65, 60, 95, 90, 100, 96, 120, 105, 134]
        },
        {
            borderWidth: 2,
            pointBorderColor: 'transparent',
            pointBackgroundColor: 'transparent',
            color: NioApp.Colors.danger,
            pointHoverBackgroundColor: NioApp.Colors.danger,
            label: "Plafond",
            borderDash: [8, 4],
            data: document.getElementById("situation") // 需要替换为重复12次的固定值列表
        },
    ]
};

解决方案

方法1:Django模板直接生成列表

在视图中传递单个mylimit变量到模板,在JS代码里用模板循环生成12个重复值:

data: [{% for _ in "xxxxxxxxxxxx" %} {{ mylimit }}{% if not forloop.last %},{% endif %} {% endfor %}]

这里"xxxxxxxxxxxx"是12个字符,对应循环12次,自动生成带逗号分隔的数组元素。

方法2:视图生成完整列表后传递

先在Django视图中生成包含12个元素的列表(注意之前range(1,12)只有11个元素,这是失败原因之一):

# views.py中
mylimit = 100
limit_list = [mylimit for _ in range(12)]  # range(12)生成0-11,共12个元素

然后在模板的JS代码中选择以下方式使用:

  • 直接输出(适用于可信数值):
data: {{ limit_list|safe }}
  • 更安全的json_script方式:
<!-- 模板中先添加隐藏的JSON数据 -->
{{ limit_list|json_script:"limit-data" }}

<!-- JS中读取数据 -->
data: JSON.parse(document.getElementById('limit-data').textContent)

方法3:JS端直接生成列表

如果不需要Django提前处理,可在JS中根据传递的单个mylimit值生成数组:

// 模板中传递单个值
const limit = {{ mylimit }};

// JS生成12个重复值的数组
data: Array(12).fill(limit)

内容的提问来源于stack exchange,提问作者Kaiss B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:20:52