Освежающий стол с Даяксице в Джанго - PullRequest
2 голосов
/ 21 сентября 2010

Я отслеживаю температуру для разных мест.У меня есть данные, хранящиеся в модели, и я установил мои views.py, но я хотел бы обновлять таблицу каждые 5 минут.Я новичок в ajax и dajaxice, как я могу написать функцию, чтобы она отображалась в html?это мой views.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 
  return render_to_response('temp.html', {'temperature': temperature_dict})

Что касается того, что я понимаю до сих пор, то это может быть мой ajax.py, я должен просто изменить его, чтобы вернуть дамп simplejson.Пожалуйста, поправьте меня, если я ошибаюсь.Это мой temp.html:

<table id="tval"><tr>
{% for label, value in temperature.items %}
      <td>{{ label }}</td>
      <td>{{ value }}</td>
{% endfor %}
    </tr></table>

Вот где я застреваю.Как я могу написать это так, чтобы мой обратный вызов обновил таблицу?

1 Ответ

6 голосов
/ 21 сентября 2010

Используйте что-то похожее на это:

from django.template.loader import render_to_string
from django.utils import simplejson
from dajaxice.core import dajaxice_functions

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('temp.html', {'temperature': temperature_dict})
  return simplejson.dumps({'table':table})

dajaxice_functions.register(temperature)

И в качестве обратного вызова JS присвойте 'table' вашему html-контейнеру (это только пример):

function my_callback(data){
    if(data!=Dajaxice.EXCEPTION){
        document.getElementById('your_table_container_id').innerHTML = data.table;
    }
    else{
        alert('Error');
    }
}

Надеюсь, это поможет вам.

...