mysql 使用Django将数据传递到Google图表

t3irkdon  于 2022-12-28  发布在  Mysql
关注(0)|答案(1)|浏览(124)

此问题已被提出,但没有像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)

想把它放到谷歌图表里

function drawChart() {
    var djangoData = JSON.parse('{{ args }}');
    var data = google.visualization.arrayToDataTable(djangoData);

也尝试了var djangoData = {{ array }};都没有运气!

编辑

建议

return render_to_response('page2.html', {'array': json.dumps(array)})

看起来它可以工作,除了数据库产生不兼容的类型。有没有办法做到这一点,而不转换每一个项目到int类型。或者如果有一个Python的方式来转换它?

eeq64g8w

eeq64g8w1#

您应该在 view.py 中尝试一下(不要忘记添加import json):

array = [['X', 'Y', 'Z'], [1, 2, 3], [4, 5, 6]]
return render_to_response('page2.html', {'array': json.dumps(array)})

然后在模板中使用不带引号的原始值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)

然后在视图中:

array = [['X', 'Y', 'Z'], [Decimal('1'), Decimal('2'), Decimal('3')]]
return render_to_response('page2.html', {
    'array': json.dumps(array, cls=DecimalEncoder),
})

相关问题