如何从 tornado web <python> 调用 javascript 函数?

How to call a javascript function from tornado web <python>?

我想用smoothy js做一个实时图表。 我的服务器是来自tornado的运行,这个是用python写的。 Smoothy 可以实时刷新图表。在 python 中,我渲染 html 文件,其中包括冰沙,但我不知道如何从 python 刷新数据(因为我的数据在 SQL 数据库中) 有从 html 文件中调用的函数:(调用它 ex.html)

  var line1 = new TimeSeries();
  var line2 = new TimeSeries();
  var i = 1;
  setInterval(function() {
    line1.append(new Date().getTime(), Math.random);
    line2.append(new Date().getTime(), Math.random());
  }, 1000);

如您所见,append 方法更新了我的图表,第二个参数是值(x 轴)。所以我的问题是: 如何使用 smoothie 从 tornado web 添加信息?

还有我的 python 代码:

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("ex.html")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

如果我的描述看不懂,请给我留言。 谢谢解答!

您可以将信息传递给您的模板,例如

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        data = {"x": "01/01/17", "y": 100}
        self.render("ex.html", data=data)

并在 html 模板中

line1.append({{ data["x"] }},{{ data["y"] }} )

这只是一个简单示例,请查看模板文档以了解更复杂的示例,例如使用循环。

这种方式是静态的,可以ajax这里是一个例子。

<script type="text/javascript">
        setInterval(function() {
        $.getJSON("/stats",function(data){
        line1.append(data.time, data.in);
        line2.append(data.time, data.in);
        });
        }, 1000);
</script>
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("ex.html")

class Stats(tornado.web.RequestHandler):
    def get(self):
        self.write({"time":"time","in":10})

def make_app():
    return tornado.web.Application([
        (r"/stats", Stats),
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()