【问题标题】:Serializing dictionary in Django to use with Dajaxice or ajax在 Django 中序列化字典以与 Dajaxice 或 ajax 一起使用
【发布时间】:2010-09-22 09:03:11
【问题描述】:

我正在尝试编写一个监控站点,以便某些设备的温度每 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 时的输出?提前致谢。

【问题讨论】:

    标签: ajax django json


    【解决方案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})
    

    注意:这是未经测试的代码:)

    【讨论】:

    • 谢谢,我正在尝试这种方法,但由于某种原因它不起作用,我一定错过了一些东西。现在可以正常使用了。
    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多