Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Javascript在Django中制作股票图表?_Javascript_Django_Json_Charts_Stock - Fatal编程技术网

如何使用Javascript在Django中制作股票图表?

如何使用Javascript在Django中制作股票图表?,javascript,django,json,charts,stock,Javascript,Django,Json,Charts,Stock,我想用Django构建一个股票网站,我找到了一个Javascript库()来制作图表,但我不懂Javascript,也不知道如何在Django模板中读取json数据。我使用从Yahoo Finance检索股票数据 我将这些.py和.js放在我的文件夹中,我的视图如下: from stock.stockretriever import StockRetriever def stockretriever(request,number): data = StockRetriever().ge

我想用Django构建一个股票网站,我找到了一个Javascript库()来制作图表,但我不懂Javascript,也不知道如何在Django模板中读取json数据。我使用从Yahoo Finance检索股票数据

我将这些.py和.js放在我的文件夹中,我的视图如下:

from stock.stockretriever import StockRetriever

def stockretriever(request,number):
    data = StockRetriever().get_historical_info('YHOO')
    return HttpResponse(simplejson.dumps(data),mimetype='application/json')
但我不知道该如何编写模板,有人能告诉我吗


谢谢

我没有安装这些库,但根据
tickp
库的设置,您需要以下数据:
[日期、打开、高、低、关闭和可选音量]
。该函数返回列
[日期、打开、高、低、关闭、音量、调整关闭]
。这里的不匹配是
AdjClose
,因此您需要从
StockRetriever
获取的数据中删除它:

from django.shortcuts import render
from stock.stockretriever import StockRetriever

def stockretriever(request, number):
    data = StockRetriever().get_historical_info('YHOO')
    # Assuming data is returned as a list of lists
    new_data = [d[:-1] for d in data]
    return render(request, 'stock.html', { 'data': simplejson.dumps(new_data) })
在自述文件之后,您需要在模板中包含以下内容:

<html>
<head><script src="tickp.js"></script><script src="stats.js"></script></head>
<body onload='plot = window.tickp("#chart"); plot.read({{ data }}); plot.plot();'>
  <div id="chart"></div>
</body>
</html>
<script type="text/javascript">
   var my_data = {{ json_plot_data }};
</script>

请注意,我在可能的Ajax调用或正确的格式和用法方面做了一些简化,但它应该给您一些入门的东西。当您遗漏某些内容时,请用您遇到的具体问题更新您的问题。

您有两个选择:

  • 呈现包含数据的模板
  • 从服务器动态获取数据
  • 如果你选择1。您可以向模板中添加如下内容:

    <html>
    <head><script src="tickp.js"></script><script src="stats.js"></script></head>
    <body onload='plot = window.tickp("#chart"); plot.read({{ data }}); plot.plot();'>
      <div id="chart"></div>
    </body>
    </html>
    
    <script type="text/javascript">
       var my_data = {{ json_plot_data }};
    </script>
    

    如果你选择2。您需要使用jQuery.ajax之类的东西来使用ajax请求动态加载json数据。该请求将调用您的视图,在jQuery.ajax调用中,您指定该请求返回JSON,JSON将自动将数据作为Javascript的对象提供。在jQuery.ajax成功处理程序中,您可以将数据传递给绘图函数。

    谢谢jro,当您告诉我时,我查看了数据的格式,我发现stockretriever返回的数据是一个dict,tickp想要的是一个列表。所以,我不能使用json格式?另一个问题是,new_data=[d[:-1]表示数据中的d]无法传入django。您没有提到dict的格式,但需要对其进行转换,以便数据与预期的格式匹配。例如,如果您的dict是
    d={'date':'2011-11-28','open':5.1,…}
    ,您应该将其转换为
    [d['date'],d['open'],…]
    。希望这对你有帮助,如果没有:请张贴的dict结构。谢谢,我已经阅读了数据在django,但没有显示在html模板。谢谢你的帮助,我不能解开它的文档,我不知道如何写在html模板。我写在html模板:数据={hisdata};plot=window.tickp(“图表”)plot.read(数据)plot.plot() {{hisdata}}但是什么也没发生。看看上面jro建议的模板。使用body onload以与您相同的方式调用绘图命令。还要检查呈现页面的源,检查数据是否出现在写入数据的位置={{hisdata}}。注意,在我的示例中,我使用json_plot_数据作为模板变量,因此您需要将模板代码更改为{{json_plot_data}}。谢谢大家。:)祝大家圣诞快乐