如何在web2py中嵌入散景图

时间:2016-08-19 10:33:45

标签: python web2py bokeh

我浪费了很长时间,无法在我的web2py应用中嵌入散景图。

我目前的代码:

def plot():
    from bokeh.plotting import figure
    from bokeh.resources import CDN
    from bokeh.embed import file_html

    plot = figure()
    plot.circle([1,2], [3,4])

    html = file_html(plot, CDN, "my plot")
    return (html)

但没有任何反应。我会感激任何一个例子,它并不是什么特别的。只是一个简单的图表。

亲切的问候

1 个答案:

答案 0 :(得分:2)

在您的代码中,html是一个字符串(HTML标记)。当web2py操作返回字符串时,该字符串将直接返回给浏览器。如果您尝试将该HTML加载为完整的网页,则无法使用,因为Bokeh file_html函数只会生成带有Javascript代码的<script>标记。它只适用于将其嵌入完整的HTML页面并在页面中加载Bokeh Javascript和CSS文件。有关详细信息,请参阅相关的Bokeh documentation

要在web2py中使用此功能,您可以使用response.files包含必要的Bokeh Javascript和CSS文件,并且可以在视图中嵌入Bokeh生成的脚本标记。

def plot():
    from bokeh.plotting import figure
    from bokeh.resources import CDN
    from bokeh.embed import file_html

    response.files.extend(list_of_Bokeh_JS_and_CSS_static_file_URLs)

    plot = figure()
    plot.circle([1,2], [3,4])

    html = file_html(plot, CDN, "my plot")
    return dict(bokeh_script=html)

由您来指定Bokeh JS和CSS文件列表并确保它们可用(您可以将它们复制到您的web2py应用程序的静态文件夹并从那里提供它们或使用Bokeh CDN,如图所示在他们的文档中。)

然后在plot操作的视图中(例如/views/default/plot.html):

{{extend 'layout.html'}}

{{=XML(bokeh_script)}}

请注意,将HTML标记字符串直接插入到web2py视图中时,必须将其包装在XML()中,以防止web2py转义HTML。

最后,假设您的系统上安装了Python和Bokeh,请确保从源代码运行web2py而不是使用Windows或OSX二进制文件,因为后者包含自己的Python解释器,因此无法导入系统上安装的库。