2013-07-10 110 views
0

我在我的Django應用程序中使用Flot圖表。我想每天畫一張有很多數據系列的圖表(折線圖)。每天,序列號可能會改變,我不知道如何用flot來處理。我的代碼是或多或少這樣的:Django jquery flot圖表多個系列

test.py

data_day_1 = [[1,56],[2,65],[3,45]] 
data_day_2 = [[1,45],[2,23],[3,89]] 
return render_to_response('test.html', {'data_day_1': data_day_1, 
             'data_day_2': data_day_2, 
             }, 
          context_instance=RequestContext(request))  

的test.html

<div class="portlet-body"> 
    <div id="site_statistics" class="chart"></div> 
</div> 

<script type="text/javascript"> 
var data1 = []; 
{% for x, y in data_day_1 %} 
data1.push([{{x}},{{y}}]) 
{% endfor %} 

var data2 = []; 
{% for x, y in data_day_2 %} 
data2.push([{{x}},{{y}}]) 
{% endfor %} 

$(function() {  
    var Options = { lines: {show: true},     
          } 
     $.plot($("#site_statistics"), 
     [{data: data1, 
     color: "#454d7d", 
     points: {show: true}, 
     label: "data_day_1", 
     }, 
    {data: data2, 
     color: "#454d7d", 
     points: {show: true}, 
     label: "data_day_2", 
     } 
    ],Options); 
});  

還有一天我可能有另一套(如data_day_3)和不知道該怎麼做。我怎樣才能動態地管理數據傳輸和新行的設計?謝謝你的幫助。

回答

1

您可以在JSON編碼您的數據:

from django.utils import simplejson as json 

data_all_days = [ 
    {'label': 'Day 1', 
    'data': [[1, 4], [1,8], [9, 8]], 
    'color': '#000', 
    }, 
    {'label': 'Day 2', 
    'data':..., 
    'color': ..., 
    }, 
    ...] 
render_to_response(... {'charts': json.dumps(data_all_days)}) 

,並在模板中只使用JSON作爲javascript代碼:

var chart_data = {{ charts|safe }}; 

$.plot($('#site_statistics'), chart_data); 

您將有data_all_days結構在你的js代碼並會用一個循環來解析它。 閱讀jquery.each

運行此代碼時,在Chrome或FireFox中打開它並打開開發人員工具(Ctrl + I或F12)並查看調試控制檯,它將顯示JavaScript中是否存在錯誤。

|safe是防止代碼被html引用的模板過濾器。

+0

我試過用這段代碼但是不起作用,圖中沒有看到......我在代碼中只添加了「option」變量。可能是什麼問題?謝謝 – RoverDar

+0

編輯:現在它的作品蝙蝠秀只有一個系列...我要瘋了。我改變了這個:...,[{data:val.data,label:val.label}],Options ..如果我不把[]圖顯示出來。 – RoverDar

+0

哦,這是我的錯誤,你不需要一個循環,對,實際上你可以在服務器端構建結構。 –