Django中的Python数据传到JavaScript
我正在忙着开发一个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>