Django中的Python数据传到JavaScript

1 投票
2 回答
1791 浏览
提问于 2025-05-01 03:29

我正在忙着开发一个Django应用,这个应用可以分析各种数据(主要是用pandas库),然后用Google图表来展示结果。

我现在遇到了一些问题,就是怎么把我的数据从Django的view.py传到模板文件中。通常这些数据会以Pandas的数据框(dataframe)或者字典(dict)的形式存在,而模板文件又是用JavaScript来处理Google图表的。

这里有一段代码,展示了一个用来显示图表的JavaScript函数。在这个例子中,我把数据直接写死在图表里(比如年份和销售额都是手动输入的)。但实际上,我需要的是用Pandas的数据框里的数据。

function drawChart() {

    var data = google.visualization.arrayToDataTable([
        ['Year', 'Sales'],
        ['2004',  1000],
        ['2005',  1170],
        ['2006',  660],
        ['2007',  1030]
    ]);

    var options = {
        title: 'Company Performance',
        hAxis: {title: 'Year', titleTextStyle: {color: 'red'}}
    };

    var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
    chart.draw(data, options);
    }

用Django模板语言{{ var }}传递单个变量或者列表是很简单的。但是我不太确定怎么把更复杂的数据框、字典等传递给JavaScript函数使用。

非常感谢。

暂无标签

2 个回答

1

这是我认为你想要的实现方式

def view_func(request):
    data =pd.DataFrame(np.random.randn(20, 5)) 

    render(request, 'template.html', {'data': data.to_html()})

想要了解更多关于CSS样式和其他内容的细节,可以查看文档

另外,在你的模板中将数据设置为'safe',可以这样做:

{{ data | safe }}
2

这就是你想要的吗?

views.py:

import json

def some_view_func(request):
    data = [
        ['Year', 'Sales'],
        ['2004',  1000],
        ['2005',  1170],
        ['2006',  660],
        ['2007',  1030]
    ]
    render(request, 'template.html', {'data': json.dumps(data)})

template.html:

<script>
    var data = google.visualization.arrayToDataTable(JSON.parse({{data}}));
</script>

撰写回答