python - 将 json 数据从 django 发送到 d3.js

标签 python django d3.js data-visualization

我正在尝试将 django 的 views.py 中的查询集传递给 d3.js。

View .py :

定义索引(请求): qs = DCPOWERSTATS.objects.all().values('TS','PuE').order_by('TS') 返回渲染(请求,'dashboard/dash.html',context=qs})

破折号.html :

<!DOCTYPE html>
<meta charset="utf-8">
<style>

.chart div {
font: 10px sans-serif;
background-color: steelblue;
text-align: right;
padding: 3px;
margin: 1px;
color: white;
             }

</style>
<div class="chart"></div>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>

var data = {{ data_json }};

var x = d3.scale.linear()
          .domain([0, d3.max(data)])
          .range([0, 420]);

d3.select(".chart")
  .selectAll("div")
  .data(data)
  .enter().append("div")
  .style("width", function(d) { return x(d) + "px"; })
  .text(function(d) { return d; });

 </script>

我需要在 views.py 和 dash.html 中进行更改以创建如下内容: https://bl.ocks.org/mbostock/3885304

以前的所有答案都令人困惑。我需要 views.py 和 dash.html 的解决方案。我还需要知道将查询集结果发送到 javascript 的完美方式。

谢谢!

最佳答案

您需要将模型转换为普通列表/字典,以便能够将它们转换为 JSON。您决定在查询集上使用 values()。还有django serialization .

尽管有序列化,您在这里有两个选择。

JSON 返回 View

或者您使用 JsonResponse 创建一个直接返回 JSON 数据的 View .

from django.http import JsonResponse

def index(request):
    qs = DCPOWERSTATS.objects.all().values('TS','PuE').order_by('TS')
    # slice the queryset to hit the database and convert into list
    return JsonResponse(qs[:])

您现在可以使用 ajax 调用在客户端加载此数据。

html(使用 jQuery)

// assuming you have registered your view at '/dcpowerstats'
$.ajax({
  url: "http://example.com/dcpowerstats",  
  success: function(data) {
     console.log(data);
  }
});

将 JSON 传递给您的模板

或者您可以使用 将 JSON 数据直接渲染到 HTML 模板中。在这种情况下,您应该将序列化数据添加到 View 并在那里使用模板标签。

查看

import json
from django.shortcuts import render

def index(request):
    qs = DCPOWERSTATS.objects.all().values('TS','PuE').order_by('TS')
    # slice the queryset to hit the database and convert into list
    context = {'data_json': json.dumps(qs[:])}
    return render(request, 'dashboard/dash.html', context=context)

html

<script>
var data = {{ data_json|safe }};
</script>

选择哪种方式取决于您的前端和偏好。

如果您只需要在 View javascript 中提供一些静态数据,我会选择模板选项。

如果您的前端需要能够动态加载不同的东西并且数据量更大,请选择第二个选项。在这种情况下,我也会考虑使用 django rest framework .

关于python - 将 json 数据从 django 发送到 d3.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43617277/

相关文章:

python - 为Python列表中的每个机场制作首字母缩略词?

css - Django CSS 未更​​新

python - 如何在 django 模板中包含外部 css、图像等?

python - 尽管设置了 STATIC_URL 和 STATIC_ROOT,DJango 仍找不到静态文件

JavaScript D3 : overlapping of color areas

javascript - D3JS 附加文本和鼠标行为不会出现

python - 基于类的装饰器和 repr() 保护

python - 在 Go 中解密在 Python 中以 CFB 模式使用 AES 加密的内容

python - 如何获取用户输入以引用Python字典

javascript - 如何创建进度条?