我正在尝试编写监控站点,以便某些设备的温度每x秒更新一次。到目前为止,我有一个使用dajaxice返回字典的函数。这是我的ajax.py:
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中获得的字典,以便输出类似于我在原始html中使用django时的输出?提前谢谢。
答案 0 :(得分: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})
注意:这是未经测试的代码:)