用Django渲染HighStock帮助我

0 投票
1 回答
707 浏览
提问于 2025-04-18 01:32

我希望有人能帮我解决我的代码问题。我把一个例子从fiddle修改了一下,让它能在Django这个网页框架下工作,但我调试的时候发现没有任何错误提示,图表也没有显示出来。这实在是太奇怪了。基本上,我是把json数据源重定向到读取我自己本地的数据。

到目前为止,我在home.html里写了以下代码:

<script src="/static/js/jquery-2.1.0.min.js"></script>
<script src="/static/js/stock/highstock.js"></script>
<script src="/static/js/stock/modules/exporting.js"></script>

<div id="stock_panel" class="stock-body" style="width:100%;height:314px"></div>

<script type="text/javascript">
$(function(){
        var chartDataUrl = "{% url 'chartFishPrice' %}";
        $.getJSON(chartDataUrl,
            function(data) {
        // Create the chart
        $('#stock_panel').highcharts('StockChart', {

            rangeSelector : {
                selected : 1,
                inputEnabled: $('#stock_panel').width() > 480
            },

            title : {
                text : 'fish Price'
            },

            series : [{
                name : 'chart_data',
                data : data,
                tooltip: {
                    valueDecimals: 2
                }
            }]
        });
    });

});

</script>

这是views.py的内容:

def chartFishPrice(request):
    ff = FishCaught.objects.filter(fish_id=1)
    data = {'dates': [], 'values': []}
    for f in ff:
        data['dates'].append(int(f.date_caught.strftime("%s")))
        data['values'].append(int(f.num_caught))
    data2 = {}
    data2['chart_data'] = data
    print data2
    return HttpResponse(json.dumps(data2), content_type='application/json')

还有urlpatterns的设置:

url(r'^chartFishPrice/$', 'fish.views.chartFishPrice', name='chartFishPrice'),

我已经仔细检查过我的json数据格式是这样的:

{"chart_data": {"dates": [1396310400, 1396396800, 1396483200, 1396569600], "values": [2, 3, 2, 4]}}

为了对比,这里是例子中的样本数据

[
/* May 2006 */
[1147651200000,67.79],
[1147737600000,64.98],
[1147824000000,65.26]]

这真是让人困惑。我非常感谢你们能提供的任何帮助。谢谢。

1 个回答

0

但是这些数据的格式看起来完全不一样。你有一个对象,它包含两个数组,一个是“日期”,另一个是“数值”。而示例数据则是一个数组的数组,每个子数组里包含一个日期和一个数值。

如果你想让格式和示例一样,你的视图应该像这样:

data = []
for f in ff:
    date = int(f.date_caught.strftime("%s"))
    value = int(f.num_caught)
    date.append([date, value])

撰写回答