如何将散列字符串添加到 Bokeh 应用程序中的自定义资源 URL?
How to add hash strings to custom resources urls in a Bokeh Application?
我正在使用模板编写 Bokeh 服务器应用程序。我添加了一些自定义 CSS 和 JS 文件。但是当我进行一些更改时,文件会从缓存中重新加载,我看不到新的更改。一种解决方案是在 URL 的末尾添加一个变量,以便在发生某些更改时从头开始加载它们。散景资源就是这样工作的。
到目前为止我已经添加了this example中的资源
{% extends base %}
<!-- goes in head -->
{% block preamble %}
<link href="app/static/css/custom.min.css" rel="stylesheet">
<script type="text/javascript" src="app/static/js/custom.min.js"></script>
{% endblock %}
<!-- goes in body -->
{% block contents %}
<div> {{ embed(roots.scatter) }} </div>
<div> {{ embed(roots.line) }} </div>
{% endblock %}
是否有内置的方法来添加这些哈希值?我想要的结果是:
<link href="app/static/css/custom.min.css?v=f5ee62ee57a37d94c35e8f7be218e11fc63df459" rel="stylesheet">
必须在加载页面之前添加此哈希字符串才能正常工作
我找到了 this class,但它似乎只是为了散景资源
Bokeh 使用 Jinja2 模板,但它不提供对模板变量的任何访问。一种可能的解决方法是创建自定义模板 class:
from hashlib import md5
from jinja2 import Template
from bokeh.io import save
from bokeh.models import Div
class ExtendedTemplate(Template):
def render(self, *args, **kwargs):
if 'with_hash' not in kwargs:
kwargs['with_hash'] = with_hash
return super().render(*args, **kwargs)
t = ExtendedTemplate("""\
<link href="{{ with_hash('app/static/css/custom.min.css') }}" rel="stylesheet">
""")
def with_hash(s):
with open(s, 'rb') as f:
return f'{s}?v={md5(f.read()).hexdigest()}'
save(Div(), template=t)
请注意,此特定代码假定 CSS 文件的路径可从其当前工作目录访问。
我正在使用模板编写 Bokeh 服务器应用程序。我添加了一些自定义 CSS 和 JS 文件。但是当我进行一些更改时,文件会从缓存中重新加载,我看不到新的更改。一种解决方案是在 URL 的末尾添加一个变量,以便在发生某些更改时从头开始加载它们。散景资源就是这样工作的。
到目前为止我已经添加了this example中的资源
{% extends base %}
<!-- goes in head -->
{% block preamble %}
<link href="app/static/css/custom.min.css" rel="stylesheet">
<script type="text/javascript" src="app/static/js/custom.min.js"></script>
{% endblock %}
<!-- goes in body -->
{% block contents %}
<div> {{ embed(roots.scatter) }} </div>
<div> {{ embed(roots.line) }} </div>
{% endblock %}
是否有内置的方法来添加这些哈希值?我想要的结果是:
<link href="app/static/css/custom.min.css?v=f5ee62ee57a37d94c35e8f7be218e11fc63df459" rel="stylesheet">
必须在加载页面之前添加此哈希字符串才能正常工作
我找到了 this class,但它似乎只是为了散景资源
Bokeh 使用 Jinja2 模板,但它不提供对模板变量的任何访问。一种可能的解决方法是创建自定义模板 class:
from hashlib import md5
from jinja2 import Template
from bokeh.io import save
from bokeh.models import Div
class ExtendedTemplate(Template):
def render(self, *args, **kwargs):
if 'with_hash' not in kwargs:
kwargs['with_hash'] = with_hash
return super().render(*args, **kwargs)
t = ExtendedTemplate("""\
<link href="{{ with_hash('app/static/css/custom.min.css') }}" rel="stylesheet">
""")
def with_hash(s):
with open(s, 'rb') as f:
return f'{s}?v={md5(f.read()).hexdigest()}'
save(Div(), template=t)
请注意,此特定代码假定 CSS 文件的路径可从其当前工作目录访问。