Сериализующий словарь в Django для использования с Dajaxice или ajax - PullRequest
0 голосов
/ 22 сентября 2010

Я пытаюсь написать сайт монитора, чтобы температура для определенных устройств обновлялась каждые 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?Заранее спасибо.

1 Ответ

1 голос
/ 22 сентября 2010

Я понимаю, что часть вопроса об использовании just 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})

ПРИМЕЧАНИЕ. Это непроверенный код:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...