json - 来自 django 查询的带有 json 的 Highcharts 未呈现
问题描述
我正在关注这篇文章,以使用来自 django 查询的 json 数据呈现 highchart。但是图表未呈现,但在检查源代码时我没有从 Django 或客户端收到任何错误。感谢是否有人可以指出错误。先感谢您。
我正在使用 django 2.0 和 python3.5
模型.py
PLATFORM = (
('ipcore','IPCORE'),
('metro','METRO E'),
('edge','EDGE'),
('access','ACCESS'),
('voice','VOICE'),
('system','SYSTEM'),
('iptv','IPTV'))
class Contract(models.Model):
vendor_name = models.ForeignKey(Vendor, on_delete=models.CASCADE)
name = models.CharField(max_length=500)
contract_no = models.CharField(max_length=100, blank=True)
partner_name = models.CharField(max_length=200, blank=True)
value = models.DecimalField(max_digits=11, decimal_places=2,
blank=True, null=True)
platform = models.CharField(max_length=100, blank=True,
choices=PLATFORM)
视图.py
def json_example(request):
return render(request, 'app/json_example.html')
def chart_data(request):
dataset=Contract.objects.all().values('platform').
exclude(platform='').annotate(Sum('value')).order_by('value__sum')
platform_name = dict()
for platform_tuple in Contract.PLATFORM:
platform_name[platform_tuple[0]] = platform_tuple[1]
chart = {
'chart': {'type': 'pie'},
'title': {'text': 'Contract Value for Every platform'},
'series': [{
'name': 'Platform',
'data': list(map(lambda row: {'name':
platform_name[row['platform']],
'y': row['value__sum']}, dataset))
}]
}
return JsonResponse(chart)
网址.py
url('json_example/', views.json_example, name='json_example'),
url('json_example/data/', views.chart_data, name='chart_data'),
json_example.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Contract Inventory Highcharts Example</title>
</head>
<body>
<div id="container" data-url="{% url 'chart_data' %}"></div>
<script src="https://code.highcharts.com/highcharts.src.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$.ajax({
url: $("#container").attr("data-url"),
dataType: 'json',
success: function (data) {
Highcharts.chart("container", data);
}
});
</script>
</body>
</html>
这是来自数据集的 json 数据。
[{"platform": "IPTV", "value__sum": "0.00"}, {"platform": "METRO E", "value__sum": "71372564.20"}, {"platform": "EDGE", "value__sum": "73867073.63"}, {"platform": "SYSTEM", "value__sum": "135465418.85"}, {"platform": "IPCORE", "value__sum": "467810178.41"}]
解决方案
这是来自数据集的 json 数据。
[{"platform": "IPTV", "value__sum": "0.00"}, {"platform": "METRO E", "value__sum": "71372564.20"}, {"platform": "EDGE", "value__sum": "73867073.63"}, {"platform": "SYSTEM", "value__sum": "135465418.85"}, {"platform": "IPCORE", "value__sum": "467810178.41"}]
您的 json 数据不包含图表选项。它应该是这样的:
'{"title":{"text":"Title"},"series":[{"name":"Installation","data":[43934,52503,57177,69658,97031,119931,137133,154175]}]}'
更重要的是,您应该先将 json 解析为 js 对象,然后再将其传递给 Highcharts 构造函数:
<script>
$.ajax({
url: $("#container").attr("data-url"),
dataType: 'json',
success: function (data) {
var chartData = JSON.parse(data);
Highcharts.chart("container", chartData);
}
});
</script>
检查示例:
推荐阅读
- java - 使用 Maven 安装和部署上传 airtifact 到 nexus
- c# - 为 tablerepeater 过滤 ireader
- pytorch - 为什么我无法安装新版本的 Pytorch?
- react-native - React Native Expo 应用程序 - 无法在 iOS 模拟器中打开应用程序
- java - 关于java中库文档的担忧
- python - 使用分类交叉熵的类权重时遇到问题
- android - 配置文件/调试 APK
- ios - 当用户滑动但不足以显示另一个单元格时如何将集合视图单元格居中
- reactjs - 对象作为 React 子级无效。found: object with keys { .... 如果您打算为孩子呈现集合,请改用数组
- php - 通过 WordPress 发送批量电子邮件的最佳实践