将Python数据结构转换为JavaScript,包括函数
我正在使用C3.js为我的Django应用程序创建图表。在我的Django模板中,我有一个JavaScript片段,如下所示:将Python数据结构转换为JavaScript,包括函数,python,json,django,c3.js,Python,Json,Django,C3.js,我正在使用C3.js为我的Django应用程序创建图表。在我的Django模板中,我有一个JavaScript片段,如下所示: <script> var chart = c3.generate({{ chart_data|safe }}); </script> 这很好,我得到了这样的结果 对于更复杂的C3图表,我需要能够在C3.generate的参数中包含JavaScript函数。(例如中的onclick值。)但JSON不支持表示函数,并添加'onclick':'fun
<script>
var chart = c3.generate({{ chart_data|safe }});
</script>
这很好,我得到了这样的结果
对于更复杂的C3图表,我需要能够在C3.generate的参数中包含JavaScript函数。(例如中的onclick
值。)但JSON不支持表示函数,并添加'onclick':'function(d,i){…};'当JSON编码时,Python dict的code>只会产生一个字符串。试图将json.jsonecoder
子类化似乎是徒劳的,因为我需要输出的不是有效的json,而是实际的JavaScript
有没有一种简洁的方法可以做到这一点?目前我正在做一个笨拙的变通方法,将JavaScript函数代码插入到json.dumps()
的反射结果中,我想我要问的是以错误的方式处理问题的情况,或者
c3.generate()
的数据结构包含两个方面:
数据结构和图表外观的配置,以及
要在图表中呈现的实际数据
我没有特别的理由需要在Django视图代码中设置配置。通过这种实现,我可以将配置(包括我想要添加的有问题的“onclick”JavaScript函数)移动到模板中,并将数据注入到单独的变量中
模板将是:
<script>
var columns = {{ chart_columns|safe }};
var chart = c3.generate({
bindto: '#chart',
data: {
columns: columns,
onclick: function (d, i) { /* ... */ }
}
});
</script>
除了解决我的问题,这更适合Django的模型视图模板设计
<script>
var columns = {{ chart_columns|safe }};
var chart = c3.generate({
bindto: '#chart',
data: {
columns: columns,
onclick: function (d, i) { /* ... */ }
}
});
</script>
chart = [
['data1', 30, 200, 100, 400, 150, 250],
['data2', 50, 20, 10, 40, 15, 25]
]
return render_to_response('chart.html', {'chart_columns': json.dumps(chart)})