无法将散景图嵌入到 Flask 应用程序中

Posted

技术标签:

【中文标题】无法将散景图嵌入到 Flask 应用程序中【英文标题】:Trouble embedding Bokeh plot into Flask app 【发布时间】:2019-04-27 17:25:29 【问题描述】:

我是 Bokeh 和 Flask 的新手。我浏览了相关问题、教程并查看了 Bokeh 文档,但无法弄清楚我做错了什么。

话虽如此,我想创建一个简单的网络应用程序,在其中“组合”各种数据报告和图表。

根据我的阅读,我想出了以下内容:

app.py:

... # imports

app = Flask(__name__, static_url_path='/static')

@app.route("/")
def index():
  return render_template("index.html")

@app.route("/bokeh_test")
def bokeh_test():

  script, div = components(sample_plot())

  return render_template("bokeh_test.html", script=script, div=div)


def sample_plot():
   """
   A random plot just for testing purposes.
   :return: plot
   """

   PLOT_OPTIONS = dict(plot_width=600, plot_height=400)
   SCATTER_OPTIONS = dict(size=12, alpha=0.5)

   data = lambda: [random.choice([i for i in range(100)]) for r in range(10)]

   plot = figure(sizing_mode='scale_both', tools='pan', **PLOT_OPTIONS)
   plot.scatter(data(), data(), color="red", **SCATTER_OPTIONS)

   # show(plot)

   return plot

散景测试.html:

<!DOCTYPE html>
<html lang="en">
 <head>
   <!-- Bokeh includes-->
  <script type="text/javascript" src="http://cdn.bokeh.org/bokeh/release/bokeh-0.12.13.min.js"></script>
  <link rel="stylesheet" href="http://cdn.bokeh.org/bokeh/release/bokeh-0.12.13.min.css" type="text/css" />
   script|safe 
 </head>
 <body>
   <div>
       <h1>Bokeh sample</h1>
           <div class='bokeh'>
            div|safe 
           </div>
   </div>
  </body>
</html>

想象一下,在我的 index.html 文件中,我有一个带有 bokeh_test.html 链接的侧栏。当我点击它时,我看到的只是标题“散景样本”,但没有情节。

如果我取消注释 show(plot),则会打开一个新选项卡并正确显示绘图,因此问题似乎不在于绘图本身,而在于我尝试嵌入它的方式在散景测试中。

我对这一切都很陌生,所以也许我在做一些愚蠢的事情,但我无法弄清楚,我希望能得到一些帮助。

PS。不确定是否相关,但为此我从 Anaconda 2 创建了一个 python 3.6 环境,并将此环境用作项目解释器。

【问题讨论】:

您正在模板中从 CDN 加载 BokehJS 版本 0.12.13。这实际上是您系统中安装的 Bokeh 版本吗?他们需要匹配。 @bigreddot 现场!看来确实是这个问题!这很愚蠢,但我想知道我还需要多长时间才能弄清楚这一点,非常感谢!顺便说一句,我实际上是希望得到您的答复,因为我看到您基本上成功地回答了我遇到的所有相关问题。 嗯,这实际上是重复的。我知道我在其他地方给出了相同的答案,但我无法立即找到前面的问题。但我会在这里添加一个答案。 【参考方案1】:

您正在模板中从 CDN 加载 BokehJS 版本 0.12.13。那里的版本需要与您系统中安装的 Bokeh 版本完全匹配。

【讨论】:

感谢您将其添加为答案,我正要自己建议。再次感谢您的帮助,这真是令人头疼。

以上是关于无法将散景图嵌入到 Flask 应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Django 上传按钮旁边嵌入散景图时出现 ImportError

在 django 中使用交互式控件制作散景图

Django:Bokeh.safely 不是一个函数

r 散景图图例 - 位置不佳移动

Zeppelin 的内联散景图

散景内联嵌入,“加载资源失败”