Python 如何在web2py中嵌入bokeh绘图

Python 如何在web2py中嵌入bokeh绘图,python,web2py,bokeh,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

我已经浪费了相当多的时间,无法在我的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)
但什么也没发生。如果能给我举个例子,我将不胜感激,不必有什么特别之处。只是一个简单的图表


在您的代码中,
html
是一个(html标记的)字符串。当web2py操作返回字符串时,该字符串将直接返回到浏览器。如果您试图将该HTML作为一个完整的网页加载,它将不起作用,因为Bokeh
file\u HTML
函数只会生成一个带有Javascript代码的
标记。只有将其嵌入到完整的HTML页面中并在页面中加载Bokeh Javascript和CSS文件时,它才有效。有关更多详细信息,请参阅相关的

要在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):

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


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

在代码中,
html
是一个字符串(html标记)。当web2py操作返回字符串时,该字符串将直接返回到浏览器。如果您试图将该HTML作为一个完整的网页加载,它将不起作用,因为Bokeh
file\u HTML
函数只会生成一个带有Javascript代码的
标记。只有将其嵌入到完整的HTML页面中并在页面中加载Bokeh Javascript和CSS文件时,它才有效。有关更多详细信息,请参阅相关的

要在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):

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


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

我们需要更多代码。如何调用
plot
函数并尝试将其输出插入页面?我只需访问www.-…-/默认/打印。自1以来,我没有专门为plot函数创建页面。我希望它能自行完成。我不知道如何在页面上嵌入图形。我们需要更多的代码。如何调用
plot
函数并尝试将其输出插入页面?我只需访问www.-…-/默认/打印。自1以来,我没有专门为plot函数创建页面。我希望它能自行完成。我不知道如何在页面上嵌入图形。非常感谢。这可能会奏效。我现在唯一的问题是无法将bokeh模块引入web2py。有简单的解决办法吗?我怎么能解决?因为没有pip的东西。我已经更新了答案(下次,一定要在原始问题中提到这样的细节)。您可以通过pip安装Python库,然后在web2py应用程序中导入这些库。但是,为了使用系统的Python安装,您必须从源代码运行web2py——Windows和OSX二进制文件包含它们自己的Python解释器,因此忽略系统的Python安装。非常感谢。这可能会奏效。我现在唯一的问题是无法将bokeh模块引入web2py。有简单的解决办法吗?我怎么能解决?因为没有pip的东西。我已经更新了答案(下次,一定要在原始问题中提到这样的细节)。您可以通过pip安装Python库,然后在web2py应用程序中导入这些库。但是,为了使用系统的Python安装,您必须从源代码运行web2py——Windows和OSX二进制文件包含它们自己的Python解释器,因此忽略系统的Python安装。