如何将数据从django传递到d3.js

如何将数据从django传递到d3.js,django,d3.js,Django,D3.js,目前我正在做一个调查web项目,需要使用d3.js执行某种条形图可视化。我正在使用Django编程我的web应用程序 我遇到的问题是如何将与对象相关的所有值传递到d3.js中使用的数组中 choice = question.choicelist.get(choice_no=choice_no) 其中,对问题的每个选项的投票将是选项1=4、选项2=6、选项3=7、选项4=1 对于ds.js,读取数据集最简单的方法是: var data = [ 4, 6, 7, 1] 如何将数据传递到模板,以便

目前我正在做一个调查web项目,需要使用d3.js执行某种条形图可视化。我正在使用Django编程我的web应用程序

我遇到的问题是如何将与对象相关的所有值传递到d3.js中使用的数组中

choice = question.choicelist.get(choice_no=choice_no)
其中,对问题的每个选项的投票将是选项1=4、选项2=6、选项3=7、选项4=1

对于ds.js,读取数据集最简单的方法是:

var data = [ 4, 6, 7, 1]

如何将数据传递到模板,以便d3.js能够像上面的代码一样读取数据?

最简单的选项:将其转换为json。Json是有效的javascript,因此您可以直接将其插入模板中,这似乎是您想要的。差不多

import json

def your_view(request):
    poll_results = [4, 6, 7, 1]
    poll_as_json = json.dumps(poll_results)
    # Gives you a string '[4, 6, 7, 1]'
    ...
    return render_or_whatever(context={'poll_as_json': poll_as_json})
在模板中:

<script ...>
   var data = {{ poll_as_json }};
   ...
</script>

var data={{poll_as_json}};
...

诸如此类?

Hmm,由于民意测验结果总是在变化,我无法将其设置为固定数组。是否有一种方法可以通过使用.all()调用对象来输入这些值?是的。当然,具体如何做取决于您的数据模型。Django可能能够帮助您直接在数据库查询中进行聚合/计数。看看你的想法。灵感的虚拟示例:
Answer.objects.annotate(num_voces=Count('vote'))
可以通过一个额外的
num_voces
字段提供所有答案,该字段包含投票数。不过只是一个例子,你必须用你自己的模型来试一下。@U.f.O,我有一个类似的问题,ReinoutvanRees的答案也解决了。如果它对你也有用,你能接受这个答案,让将来的其他人知道它有用吗?谢谢