这个问题已经被问到但没有这样回答one .
在我的 view.py
中,我有从 MySQL 中提取的数据,数组示例:
(Decimal('13'), Decimal('6'), Decimal('13'))
(Decimal('207'), Decimal('18'), Decimal('129'))
(Decimal('301'), Decimal('38'), Decimal('193'))
(Decimal('204'), Decimal('32'), Decimal('150'))
(Decimal('159'), Decimal('25'), Decimal('88'))
args = {'array':array}
return render_to_response('page2.html', args)
尝试将其放入 Google Chart
function drawChart() {
var djangoData = JSON.parse('{{ args }}');
var data = google.visualization.arrayToDataTable(djangoData);
还尝试了 var djangoData = {{ array }};
都没有运气!
编辑1
建议
return render_to_response('page2.html', {'array': json.dumps(array)})
看起来它可以工作,除了数据库产生不兼容的类型。有没有一种方法可以在不将每个项目都转换为 int
类型的情况下执行此操作。或者是否有 pythonic 方式来转换它?
编辑 - 解决方案
使用选择的答案并将|safe
添加到数组中,所以{{array|safe}}
最佳答案
你应该在 view.py 中尝试这个(不要忘记添加 import json
):
array = [['X', 'Y', 'Z'], [1, 2, 3], [4, 5, 6]]
return render_to_response('page2.html', {'array': json.dumps(array)})
然后在模板中使用不带引号的原始值数组:
var djangoData = {{ array|safe }};
var data = google.visualization.arrayToDataTable(djangoData);
编辑:使用自定义 JSONEncoder 处理 Decimal
类型,从 this question 中窃取:
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
return super(DecimalEncoder, self).default(o)
然后在 View 中:
array = [['X', 'Y', 'Z'], [Decimal('1'), Decimal('2'), Decimal('3')]]
return render_to_response('page2.html', {
'array': json.dumps(array, cls=DecimalEncoder),
})
关于python - 使用 Django 将数据传递给 Google Charts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830679/