使用Django将数据传递到Google Charts

 最佳乔海燕 发布于 2023-02-07 16:16

这个问题已经被问,但没有回答这样一个.

在我的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 }}; 两个没有运气!

EDIT1

建议

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

看起来它会起作用,除了db产生不兼容的类型.有没有办法在不将每个项目转换为int类型的情况下执行此操作.或者,如果有一种pythonic方式转换它?

编辑 - 解决方案

使用选定的答案并添加|safe到数组,所以{{array|safe}}

1 个回答
  • 你应该在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从这个问题中窃取的类型:

    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),
    })
    

    2023-02-07 16:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有