我浪费了很长时间,无法在我的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)
但没有任何反应。我会感激任何一个例子,它并不是什么特别的。只是一个简单的图表。
亲切的问候
答案 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解释器,因此无法导入系统上安装的库。