Json Django-d3.js没有明确请求的通信?
我正在努力将django查询集传递给d3.js进行绘图。Json Django-d3.js没有明确请求的通信?,json,django,d3.js,Json,Django,D3.js,我正在努力将django查询集传递给d3.js进行绘图。 我想做的: -我有一个表单,允许用户在我的数据库中进行特定查询(这非常好)。 -该搜索的结果都是按日期排序的(详见下文),但可能会有很多(介于0到20000之间)。所以我不想将它们显示为列表,而是制作一个条形图 问题是:我不知道将结果传输到d3js的最佳方法是什么,因为我返回的更多的是我的视图,而不仅仅是我想要绘制的内容 my views.py: class QBinnedImages(View): templat
我想做的:
-我有一个表单,允许用户在我的数据库中进行特定查询(这非常好)。
-该搜索的结果都是按日期排序的(详见下文),但可能会有很多(介于0到20000之间)。所以我不想将它们显示为列表,而是制作一个条形图 问题是:我不知道将结果传输到d3js的最佳方法是什么,因为我返回的更多的是我的视图,而不仅仅是我想要绘制的内容 my views.py:
class QBinnedImages(View):
template_name = 'data/query_simple.html'
form_class = QueryImages
def get(self, request, *args, **kwargs):
### working fine
def form_valid(self, form):
### Do some stuff to get the query results
context = {"title":"Query Results", "form":form, \
"ndata":len(alldates), "data":JsonResponse(alldates)}
return render(self.request, 'data/query_results.html', context)
class QueryResults(View):
template_name='data/query_results.html'
alldates是以下形式的词典:
{"N": ["20150926T230027", "20150926T230547", "20150926T231106", \
"20150926T233741", "20150926T234301", "20150926T234820", \
"20150926T235339", "20150926T235858", "20150927T000936",]}
目前,我的模板数据/query_results.html如下所示:
{% entends 'base.html' %}
{% block content %}
<div id="blablabla">
<h1> {{ title }} </h1>
<p> You queried with the following constrains : </p>
{{ form.as_p }}
<p> We found {{ ndata }} satisfying your query </p>
</div>
<div id="plots">
<svg class="bresults"> </svg>
</div>
<script src="//d3js.org/d3.v3.js" charset="utf-8"></script>
<script>
// definition of the axis and other small stuff
d3.json( "{{ data }}", function(error, data) {
if (error) return console.warn(error);
x.domain([0, d3.max(data, function(d) { return d.value; })]);
});
</script>
{% endblock content %}
{%entends'base.html%}
{%block content%}
{{title}}
您使用以下约束进行了查询:
{{form.as_p}}
我们发现{nda}}满足您的查询
//轴和其他小东西的定义
d3.json(“{{data}}”),函数(错误,数据){
如果(错误)返回控制台。警告(错误);
x、 域([0,d3.max(数据,函数(d){返回d.value;})];
});
{%endblock内容%}
错误出现在d3.json上。我知道d3.json实际上发送了一个json流请求。。。但是我被困在那里了
我希望这里有足够的信息来帮助我
Thaaaaanks 要将Django变量传递给JS变量,需要:
var js_variable = "{{ django_variable }};"
就你而言:
<script>
// definition of the axis and other small stuff
var data = "{{ data|escapejs }}"; // transfer from django to js
d3.json( data, function(error, data) {
if (error) return console.warn(error);
x.domain([0, d3.max(data, function(d) { return d.value; })]);
});
</script>
//轴和其他小东西的定义
var data=“{data | escapejs}}”//从django转移到js
d3.json(数据,函数(错误,数据){
如果(错误)返回控制台。警告(错误);
x、 域([0,d3.max(数据,函数(d){返回d.value;})];
});
所以我找到了一种绘制图的方法。
实际上传递数据非常简单,但是。。。只要你不知道确切的方法,就不可能猜到。
简而言之:在我刚刚编写的模板中
var data = {{ data | safe }};
但在视图中还必须进行其他更改!只要输出大致是一个字典列表,就不需要JSON
在views.py中:
alldates = [{'camera':'N', 'days':t[0].isoformat(), \
'counts':c['total_counts']} \
for t, c in zip(times, counts_per_day)]
context = {"title":"Query Results", "form":form, \
"ndata":len(alldates), "data":alldates}
return render(self.request, 'data/query_results.html', context)
然后在模板中:
var parseDate = d3.time.format("%Y-%m-%dT%H:%M:%S").parse;
var data = {{ data | safe}};
data.forEach(function(d) {return d.days=parseDate(d.days);});
Martin的回答极大地帮助了我,将django的变量传递给JS,而您只需要:
var list={{data}代码>或变量列表={{data}}代码>嗯。。。同意我不再有错误。。。不过现在所有的“都是歪斜的:{u和39;N和39;39;::{39;39;201509266T230027和39;39;39;和39;39;和39;39;39;39;20150926;20150926所有现在所有的“现在所有的”现在所有的“现在所有的”现在所有的“现在所有的”现在所有的“现在所有的”都是歪斜::{u和现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的“现在所有的”现在所有的现在所有的所有的“现在所有的”都是歪斜:::::::{{现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的“现在所有的现在所有的现在所有的”都是歪斜:::::::::{现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的现在所有的现在926T23539';,使用var list={{{data};
无效?请尝试使用->{{data}escapejs}
现在确实好多了!!!我可能可以从那里开始慢慢地…非常缓慢地…我想知道,如果我传递的结果数量变大(20000),这种将信息发送到d3.js的方式会变慢吗?啊,这就是你的意思!!!这不完全是我在你的帮助下解决它的方式。这是我所做的更改/代码。虽然我有一些疑问(d3.json是…var data=“{{data | escapejs}”警报(data);//让我看看结果是什么
(注意分号在)我还没有验证答案,有两个原因:1.我宁愿看到拼写错误被更正2.我仍然不确定这是继续进行的方式,因为到目前为止我还无法使用js中的数据变量。