刷新python瓶中的页面时,数据似乎不更新?

时间:2019-05-16 02:37:48

标签: python refresh bottle

我正在运行一个脚本,该脚本显示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并发出信号,指示我要实时更新的那个。

1 个答案:

答案 0 :(得分:-1)

Bottle缓存模板。因此,如果您在模板创建过程中输入值,它将缓存这些值。

from bottle import TEMPLATES
TEMPLATES.clear()

将重置那些。

但是,您确实应该考虑数据的来源并利用websocket。 gevent具有出色的websocket库,并且可以与bottle一起使用,以使您的代码异步。只需少量工作和javascript,您就可以查询api,并将数据实时输入到代码中。