2010-09-22 1 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, чтобы результат был похож на то, что у меня есть в моем исходном html, используя только django? Заранее спасибо.

ответ

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

+0

Рад помочь! Интересно, почему он не работал раньше ... – codekoala

Смежные вопросы