我一直在尝试运行由Flask处理的Bokeh应用服务器。
我运行Bokeh服务器并主要使用https://github.com/bokeh/bokeh/blob/0.12.14/examples/howto/server_embed/flask_embed.py中的代码嵌入应用程序 我改变了一些关于stackoverflow和邮件组的各种主题的内容,并在现在进行了好几天的实验。
然后我成功地将一些基于on_change属性的回调挂钩到我的元素:
for w in [offset, amplitude, phase, freq]:
w.on_change('value', update_data)
def update_data(attrname, old, new):
# Get the current slider values
amplitude_value = amplitude.value
offset_value = offset.value
phase_value = phase.value
freq_value = freq.value
# Generate the new curve
x = np.linspace(0, 4*np.pi, N)
y = amplitude_value*np.sin(freq_value*x + phase_value) + offset_value
source.data = dict(x=x, y=y)
#Here i would need to find some DIV on the website and change it based on the calculated value
calculated_thing = calculate_something_really_complicated(amplitude_value,offset_value,phase_value,freq_value)
#Find a DIV on webpage and change it.
问题是,我想从这些滑块获取输出值(动态地更改,到服务器)并基于该输出我想在Python函数中计算一些我将传递给HTML元素的内容结果页面。在这里使用这些值可以静态地工作一次(如同意图一样,因为函数只传递一次,为这些对象设置监听器)。问题是我想改变的那些元素本身不是Bokeh小部件,而是我在这个网页上的DIV和其他HTML元素。如果我可以从Python轻松创建/更新DIV,我想我也可以管理。
我可以通过以下方式获得此功能:在每个滑块上使用自定义JS Callback:
w.js_on_change('value', CustomJS(args=dict(amplitude=amplitude, offset=offset, phase=phase, freq=freq),code=js_code))
js_code = """
doc = document.getElementById("dynamic_equation");
doc.textContent = amplitude.value + "sometext" + offset.value;
"""
不幸的是我无法做这件事,我只想用JS,因为我想利用Sympy根据这些值计算一些方程并返回输出。
我可以提供任何澄清和进一步的代码(现在约有130行+模板)。
答案 0 :(得分:1)
我看不到一个好的解决方案,因为我没有看到python代码如何能够改变一些不受其控制的HTML代码。但我认为有几种解决方法:
使用div bokeh widget。它看起来像任何其他div元素,除了它是由散景服务器生成
你甚至可以想象一些肮脏的技巧来隐藏散景生成的div,并用一些JS将其内容复制到你的div ......
为了您的信息,散景服务器可以使用html template with custom css,但目前仅限于创建一个包含所有散景文档(绘图/小部件)的全局div。增强此功能是{的目标{3}}。它将允许散景服务器生成在html模板