gpt4 book ai didi

django - 使用模板系统时在 Django 中使用 JQuery 刷新 div

转载 作者:行者123 更新时间:2023-12-03 23:05:03 28 4
gpt4 key购买 nike

我想刷新 Django 中包含温度数据的 div 标签。每 20 秒获取一次数据。到目前为止,我已经使用这些函数实现了这一点:

function refresh() {
$.ajax({
url: '{% url monitor-test %}',
success: function(data) {
$('#test').html(data);
}
});
};
$(function(){
refresh();
var int = setInterval("refresh()", 10000);
});

这是我的 urls.py:

urlpatterns += patterns('toolbox.monitor.views',
url(r'^monitor-test/$', 'temperature', name="monitor-test"),
url(r'^monitor/$', 'test', name="monitor"),
)

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})

temp.html 有一个 include 标签:

<table id="test"><tbody>
<tr>
{% include "testing.html" %}
</tr>
</tbody></table>

testing.html 仅包含一个 for 标记来迭代字典:

{% for label, value in temperature.items %}
<td >{{ label }}</td>
<td>{{ value }}</td>
{% endfor %}

div 每 10 秒刷新一次,允许我使用模板系统而无需用 js 修补它。然而,几分钟后,我同时收到重复的“/monitor-test”调用,3-4次。另外,我想知道是否有更好的方法来做到这一点,同时能够使用 Django 中的模板系统。谢谢。

最佳答案

在这种情况下,我通常解决 3-4 个“并发”请求的方法是放置 setTimeout()在我想重复运行的函数内部调用。

function refresh() {
$.ajax({
url: '{% url monitor-test %}',
success: function(data) {
$('#test').html(data);
}
});
setTimeout(refresh, 10000);
}

$(function(){
refresh();
});

这使得每次 refresh 都是如此函数被调用时,它会自动设置在 10 秒后再次调用。另一个想法(如果您仍然有问题)是移动 setTimeout进入 AJAX 调用中的 success 函数:

function refresh() {
$.ajax({
url: '{% url monitor-test %}',
success: function(data) {
$('#test').html(data);
setTimeout(refresh, 10000);
}

});
}

$(function(){
refresh();
});

如果由于某种原因 AJAX 调用没有成功,该选项可能有点粗略。但我想你总是可以通过其他处理程序来解决这个问题......

我的一个建议(与你的问题不是特别相关)是将整个 <table>您渲染并返回 temperature 的模板中的内容看法。因此,在您的主模板中:

<div id="test">
{% include 'testing.html' %}
</div>

以及testing.html :

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

按照当前的方式插入表的一部分让我想哭:) 在 AJAX 调用中通过线路发送更多字节应该不会造成任何伤害。

关于django - 使用模板系统时在 Django 中使用 JQuery 刷新 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3776571/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com