我有一个烧瓶应用程序,可与bokeh服务器对话。
我想将参数传递给bokeh服务器,以便bokeh服务器可以使用该信息来不同地显示事物。
这是我的烧瓶路线,以及我尝试将参数传递给bokeh的方式:
@app.route('/test')
def test():
return render_template(
'bokeh.html',
template='Flask',
script=server_document(
url='http://localhost:6001/test',
arguments={'foo': 'bar'}
))
我认为我正确地传递了参数,但是我不知道如何在bokeh服务器上访问这些参数。所以我实际上不知道他们是否能到达那里,但是我看不到任何错误。
我了解到server_document()
返回了一个javascript字符串:
<script src="http://localhost:6001/test/autoload.js?bokeh-autoload-element=1001&bokeh-app-path=/test&bokeh-absolute-url=http://localhost:6001/test&foo=bar" id="1001"></script>
因此参数被嵌入到URL http://localhost:6001/test&foo=bar
中,但我仍然不知道bokeh服务器如何使它们可用于python代码。
如何在bokeh服务器上访问参数:{'foo': 'bar'}
?
编辑:
我以为我在Passing arguments to Bokeh autoload_server from Flask api中找到了答案,但是我错了。
当我尝试将建议的内容添加到main.ipynb文件中(我们正在使用面板来提供bokeh应用程序)时,此操作无效:
main.ipynb:
...
print(doc.session_context.request.arguments)
report.serve()
导致此错误:
Error running application handler <bokeh.application.handlers.directory.DirectoryHandler object at 0x7f981b953cf8>: name 'doc' is not defined
File "main.ipynb"...
File "/conda/lib/python3.7/site-packages/bokeh/application/handlers/code_runner.py", line 179...
NameError: name 'doc' is not defined
答案 0 :(得分:2)
对此内容进行了in the documentation的描述:
# request.arguments is a dict that maps argument names to lists of strings,
# e.g, the query string ?N=10 will result in {'N': [b'10']}
args = curdoc().session_context.request.arguments
try:
N = int(args.get('N')[0])
except:
N = 200