2010-09-22 16 views
0

我正在嘗試編寫一個監視器網站,以便某些設備的溫度每隔x秒更新一次。到目前爲止,我有一個使用dajaxice返回字典的函數。這是我的ajax.py:在Django中序列化字典以與Dajaxice或ajax一起使用

def temperature(request): 
    temperature_dict = {} 
    for filter_device in TemperatureDevices.objects.all(): 
    get_objects = TemperatureData.objects.filter(Device=filter_device) 
    current_object = get_objects.latest('Date') 
    current_data = current_object.Data 
    temperature_dict[filter_device] = current_data 
    table = str(temperature_dict) 
    return simplejson.dumps({'table':table}) 

這是我的回調:

function my_callback(data){ 
    if(data!=Dajaxice.EXCEPTION){ 

     document.getElementById('test').innerHTML = data.table; 
    } 
    else{ 
     alert('Error'); 
    } 
} 
Dajaxice.toolbox.monitor.temperature('my_callback'); 

本來,我的HTML看起來像這樣:

<div id="test"> <tr> 
{% for label, value in table %} 
     <td>{{ label }} 
     </td> 
     <td>{{ value }} 
     </td> 
{% endfor %} 
    </tr></div> 

我怎麼可以這樣寫,所以我可以迭代通過我在dajax中獲得的字典,以便輸出類似於我使用django的原始html中的內容。提前致謝。

回答

1

我正在考慮「僅使用Django」部分的問題,這意味着您對使用JavaScript生成必需的DOM對象以插入頁面不感興趣。

因此,我的第一個想法是在視圖中呈現一個Django模板,並在您的JSON中返回。例如,假設你有一個名爲「_data_table.html」模板:

<tr> 
{% for label, value in table %} 
<td>{{ label }}</td> 
<td>{{ value }}</td> 
{% endfor %} 
</tr> 

你原來的HTML可以修改成這個樣子:

<div id="test"> 
{% include '_data_table.html' %} 
</div> 

你可以改變你的觀點看起來像這樣的:

from django.template.loader import render_to_string 

def temperature(request): 
    temperature_dict = {} 
    for filter_device in TemperatureDevices.objects.all(): 
     get_objects = TemperatureData.objects.filter(Device=filter_device) 
     current_object = get_objects.latest('Date') 
     current_data = current_object.Data 
     temperature_dict[filter_device] = current_data 

    table = render_to_string('_data_table.html', {'table': temperature_dict}) 
    return simplejson.dumps({'table': table}) 

注意:這是未經測試的代碼:)

+0

謝謝,我嘗試這種做法,對一些重即使它不工作,我一定錯過了一些東西。現在它工作正常。 – dura 2010-09-22 18:48:39

+0

很高興幫助!我想知道爲什麼它以前不工作... – codekoala 2010-09-23 15:58:54