2011-08-07 64 views
0

我需要顯示來自HttpResponse的數據作爲圖表(xaxis = datetime,yaxis是一個聚合統計函數)。我成功地將數據導出到一個csv文件。如何將django與amcharts集成?amcharts與django的集成

def monitor(request): 
    if request.method == 'POST' : 
    forms = ServicesForm(request.POST) 
    if forms.is_valid(): 
     service = forms.cleaned_data['service'] 
     scale = forms.cleaned_data['scale'] 
     datatype = forms.cleaned_data['datatype'] 
     starttime = forms.cleaned_data['starttime'] 
     endtime = forms.cleaned_data['endtime'] 

     db_table = u'servicestats' 
     name = Servicenames.objects.get(servicename=service) 

     servicestats = Servicestats.objects.raw('SELECT distinct dtime,scale,' + datatype + ' FROM ' + db_table + ' WHERE scale = ' + str(scale) + ' AND dtime BETWEEN "' + str(starttime) + '" AND "' + str(endtime) + '" AND service_id = ' + str(name.id)) 
     response = HttpResponse(mimetype='text/csv') 
     response['Content-Disposition'] = 'attachment;filename="export.csv"'   
     writer = csv.writer(response) 
     for s in servicestats: 
      if datatype =='cnt': 
       writer.writerow([s.dtime,s.cnt]) 
      if datatype =='avg' : 
       writer.writerow([s.dtime,s.avg]) 
      if datatype =='min' : 
       writer.writerow([s.dtime,s.min]) 
      if datatype =='max' : 
       writer.writerow([s.dtime,s.max]) 
      if datatype =='threenines' : 
       writer.writerow([s.dtime,s.threenines]) 
     return response 

else: 
    forms = ServicesForm 


return render_to_response('monitor/monitor.html', {'forms':forms}, 
    context_instance = RequestContext(request)) 

template,html : 
<form action='/monitor/' method="post"> {%csrf_token%} 
    {{ forms.as_p}} 
    <input type = "submit" value = "Submit">  
</form> 
+0

我不明白你的問題。它看起來像你的監視器視圖旨在表現爲一個寧靜的界面,其中表單的帖子返回一個CSV文件?你的情況怎麼樣? –

+0

這是我的問題。我返回了一個csv文件來測試我的查詢。我需要返回amchart圖。 – dave

回答

1

好吧,你已經有Django部分工作。現在,您需要將其饋送到客戶端的amcharts JavaScript渲染器中。請參閱blog article瞭解如何執行此操作。您需要使用您的網址替換data.txt中:

window.onload = function() { 
     loadCSV("data.txt"); 
    } 

,並從修改loadCSV到達後您的上述觀點:

function loadCSV(file) { 
     if (window.XMLHttpRequest) { 
      // IE7+, Firefox, Chrome, Opera, Safari 
      var request = new XMLHttpRequest(); 
     } 
     else { 
      // code for IE6, IE5 
      var request = new ActiveXObject('Microsoft.XMLHTTP'); 
     } 
     // load 
     request.open('GET', file, false); 
     request.send(); 
     parseCSV(request.responseText); 
    } 

快速谷歌提供this page瞭如何修改那request.open改爲使用post。

+0

我應該下載並將amcharts解壓到我的django項目中嗎? – dave

+0

是的。你需要加載他們的JavaScript。不知道他們是否有全球可用的下載鏈接,但我總是主持我自己的這些。 –

+0

你是什麼意思「我總是主持我自己的這些」? – dave

0

使用此blog article作爲基準,您將用JavaScript文件中生成的數組替換數據。基本上在你的新模板中這樣做:

var dataprovider = [ 
{% for s in servicestats %} 
     {date:s.dtime, value1:s.cnt, value2:s.min **more values here**}{% if not forloop.last %},{% endif %} 
{% endfor %} 

];

並將servicestats傳遞到該模板。

+0

如何在JavaScript模板的視圖中傳遞servicestats? – dave

+0

換句話說,我是否需要從django視圖發送HTTPresponseredirect與servicestats數據到html javascript模板?我如何在視圖中傳遞這個信息? – dave

+0

順便說一下,在我看來,傳遞已在視圖中檢索到的dtime和其他數據值而不是queryset servicestats會更好。如何將它寫入我的視圖中?謝謝。 – dave