Bokeh中静态路径变量的设置位置(用于create_html_snippet)

5 投票
1 回答
2042 浏览
提问于 2025-04-17 23:34

我正在尝试使用Bokeh的'create_html_snippet'方法在网页上展示pandas/seaborn绘制的图表。

作为测试,我克隆了@rpazyaquian的示例库,地址是 https://github.com/rpazyaquian/bokeh-flask-tutorial/wiki/Rendering-Bokeh-plots-in-Flask。不幸的是,由于Bokeh自这个库创建以来发生了变化,它现在无法正常工作。

页面上的主要HTML输出完全一样,唯一不同的就是Bokeh生成的文件名不同。

总体上唯一的区别在于Bokeh生成的 *.embed.js 文件。如下文摘所示,该文件中的主机/static路径变量似乎无法正常工作。我在内置的Flask开发服务器和使用gunicorn时都进行了测试。

这是@rpazyaquian的 Heroku网站上工作版本的顶部部分:

var host = "";

var staticRootUrl = "http://localhost:5006/bokeh/static/";
if (host!=""){

    staticRootUrl = host + "/static/";
    var bokehJSUrl = window.location.protocol + "//" + staticRootUrl + "js/bokeh.js";
}
else {
    bokehJSUrl = staticRootUrl +"js/bokeh.js";
}

这是不工作的本地版本,使用Heroku 0.4:

var host = "";

var staticRootUrl = "http://localhost:5006/bokeh/static/";
if (host!=""){

    staticRootUrl = "//" + host + "/bokehjs/static/";
    var bokehJSUrl = staticRootUrl + "js/bokeh.js";
}
else {
    bokehJSUrl = staticRootUrl +"js/bokeh.js";
}

明显的问题:

  1. 主机不是 http://localhost:5006,而是 http://127.0.0.1:5000/,当使用开发服务器时,或者如果使用gunicorn/nginx,主机地址会有所不同。
  2. 我不知道'bokehjs'文件夹是在哪里设置的,但在这里似乎不太相关。

有没有人知道Bokeh发生了什么变化可以解决这个问题?或者有没有人成功通过Flask模板提供Bokeh图表的其他方法?如果有更好的解决方案,请告诉我。我只是想把一个图表的HTML片段返回到模板中。

1 个回答

4

更新:这个功能已经被淘汰了。现在请使用更好的 bokeh.embed 模块:

https://github.com/ContinuumIO/bokeh/blob/master/bokeh/embed.py

你可以在这里看到一些使用示例:

https://github.com/ContinuumIO/bokeh/tree/master/examples/embed

撰写回答