【问题标题】:How to make a stock chart in Django with Javascript?如何使用 Javascript 在 Django 中制作股票图表?
【发布时间】:2011-11-28 14:08:00
【问题描述】:

我想用 Django 建立一个股票网站,我找到了一个 Javascript 库 (tickp) 来制作图表,但我不会 Javascript,也不知道如何读取 Django 模板中的 json 数据。我使用this code 从雅虎财经检索股票数据。

我将这些 .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')

但是我不知道我应该如何编写模板,有人可以告诉我吗?

谢谢。

【问题讨论】:

    标签: javascript django json charts stock


    【解决方案1】:

    你有两个选择:

    1. 呈现包含数据的模板
    2. 从服务器动态获取数据

    如果你选择 1. 你可以在你的模板中添加这样的东西:

    <script type="text/javascript">
       var my_data = {{ json_plot_data }};
    </script>
    

    该模板还包括从数据生成图表的 javascript 代码。视图函数将包括数据获取并返回一个上下文对象,如下所示:

    def my_stock_plot_view(request, number):
        # get stock data
        json_data = simplejson.dumps(data)
        django.shortcuts.render(request, 'template.html', {'json_plot_data':json_data})
    

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

    【讨论】:

    • 感谢您的帮助,我无法理解它的文档,我不知道如何在 html 模板中编写。
    • 我在html模板中写:
       {{hisdata}}
      但什么也没发生。
    • 看看上面 jro 建议的模板。使用 body onload 像你一样调用绘图命令。还要检查渲染页面的来源,数据是否出现在你写data = {{ hisdata }}的地方。请注意,在我的示例中,我使用 json_plot_data 作为模板变量,因此您需要将模板代码更改为 {{ json_plot_data }}。
    • 谢谢,伙计们。:)圣诞快乐
    【解决方案2】:

    我没有安装这些库,但基于tickp 库的readme,您需要以下数据:[date, open, high, low, close and optionally volume]get_historical_info 函数返回列 [Date, Open, High, Low, Close, Volume, AdjClose]。这里的不匹配是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>
    

    请注意,我在可能的 Ajax 调用或正确的格式和使用方面做了一些改进,但它应该可以让您开始使用。当您遗漏某些内容时,请用您遇到的具体问题更新您的问题。

    【讨论】:

    • 谢谢jro,当你告诉我的时候,我查看了数据的格式,我发现从stockretriever返回的数据是一个字典,而tickp想要的是一个列表。所以,我可以't use the json format? and other question is ,new_data = [d[:-1] for d in data] can't not pass in django.
    • 您没有提到字典的格式,但您需要对其进行转换,以使数据与预期的格式相匹配。简单的例子,如果你的字典是d = {'date': '2011-11-28', 'open': 5.1, ...},你应该把它转换成[d['date'], d['open'], ...]。希望这对您有所帮助,如果没有:请发布字典的结构。
    • 谢谢,我已经阅读了django中的数据,但是html模板中没有显示。
    猜你喜欢
    • 2021-09-04
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2011-05-26
    相关资源
    最近更新 更多