我正在使用C3.js为我的Django应用程序创建图表。在我的Django模板,我有JavaScript片段是这样的:将Python数据结构转换为JavaScript,包括函数
<script>
var chart = c3.generate({{ chart_data|safe }});
</script>
在视图中,我建立使用Python数据结构,它是由该模板被呈现之前被转换为JSON图表:
chart = {
'bindto': '#chart',
'data': {
'columns': [
['data1', 30, 200, 100, 400, 150, 250],
['data2', 50, 20, 10, 40, 15, 25]
]
}
}
return render_to_response('chart.html', {'chart_data': json.dumps(chart)})
工作正常,我得到类似this example。
对于更复杂的C3图表,我需要能够在c3.generate的参数中包含JavaScript函数。 (例如this donut chart中的onclick
值。)但JSON不支持表示函数,并且向Python dict添加'onclick': 'function (d, i) { ... };'
只会在JSON编码时产生字符串。尝试子类json.JSONEncoder
似乎没有结果,因为我需要输出的是无效的JSON,它是实际的JavaScript。
有没有一个干净的方式做到这一点?目前我正在做一个kludgy解决方法,将JavaScript函数代码插入到json.dumps()
的结果中。