嵌入自定义 .css 和 .js 的 Bokeh

Bokeh embedded with custom .css and .js

我正在尝试破解 tornado embedded app example 以添加自定义 css 和 js。我似乎无法正确地获得 css 和 js linked。我应该期望 css 和 js 文件在文档头中正常 link 吗?

<head>
<link href="/static/css/custom.css" rel="stylesheet" type="text/css">
<script src="/static/js/custom.js"></script>
</head>

...或者我应该先使用 bokeh custom static handler 加载所有内容?

...或者我可以像这样将它传递到索引处理程序中:

class IndexHandler(RequestHandler):
    def get(self):
        template = env.get_template('embed.html')
        static = env.get_static('/css/style.css')
        script = server_document('default')
        self.write(template.render(script=script, template="Tornado", static=static))

供参考:

app
|__data
|__static
|    |__css
|       |__custom.css
|    |__js
|       |__custom.js
|__templates
|    |__embed.html
|__main.py

只是在寻找一些一般指导。谢谢。

您可以在调用 Server 时向 extra_patterns 添加这样的内容:

(server_static_route, StaticFileHandler, { "path" : local_path_to_static_dir })

其中 StaticFileHandler 来自 tornado.web

bigreddot 的回答是正确的,但我想补充一些细节。在我的例子中,我想访问 /static/css 的内容。您需要这些包括:

from tornado.web import StaticFileHandler
import os.path as op

然后在打开服务器时添加以下应用程序处理程序:

[(r'/static/css/(.*)', StaticFileHandler,
 {'path': op.normpath(op.dirname(op.abspath(__file__)) + r'/static/css')})]

这与任何其他应用程序处理程序一起传递给 extra_patterns 参数。