我正在运行一个脚本,该脚本显示python瓶中的一些数据,其中之一是我想实时显示的信号强度。刷新页面时,该值不会更改,因此必须重新运行服务器才能更新该信号强度。我尝试过ajax,但似乎无法正常工作。 我应该使用什么使它起作用?
编辑:变量是来自另一个文件的列表。
iplist = [192.168.1.1, 192.168.1.2]
hostlist = [android234567, android677896]
maclist = [a1:b2:c3:d4:e5:f6, a1:b2:c3:d4:e5:f6]
signallist = [-56, 23]
。
@app.route('/')
def index():
info={'iplist': iplist, 'maclist': maclist, 'signallist': signallist, 'hostlist': hostlist}
tpl = '''
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script type="text/javascript">
function ajax(){
var req = new XMLHttpRequest();
req.onreadystatechange = function(){
if (req.readyState == 4 && req.status == 200) {
document.getElementById('signallist').innerHTML = req.responseText;
}
}
req.open('REQUEST', '../connectedDevices.py', true);
req.send();
}
(function(){ajax();}, 1000);
</script>
</head>
<body onload="ajax();">
<table>
<tr>
<td>IP address</td>
<td>Hostname</td>
<td>MAC address</td>
<td>Signal</td>
</tr>
%for i in range(len(maclist)):
<tr>
<td>{{iplist[i]}}</td>
<td>{{hostlist[i]}}</td>
<td>{{maclist[i]}}</td>
<td id="signallist">{{signallist[i]}}</td>
</tr>
%end
</table>
</body>
</html>
'''
return template(tpl, info)
这会打印一张图表,其中显示Ip,主机,mac并发出信号,指示我要实时更新的那个。
答案 0 :(得分:-1)
Bottle缓存模板。因此,如果您在模板创建过程中输入值,它将缓存这些值。
from bottle import TEMPLATES
TEMPLATES.clear()
将重置那些。
但是,您确实应该考虑数据的来源并利用websocket。 gevent
具有出色的websocket库,并且可以与bottle
一起使用,以使您的代码异步。只需少量工作和javascript,您就可以查询api,并将数据实时输入到代码中。