我们有一个自定义 Jinja 过滤器,用于为我们的 Javascript 和 CSS 资源创建缓存破坏 URL。我们现在注意到,在我们的生产环境中,最终编译的模板会被缓存。这会导致问题,因为我们的模板过滤器有时不会创建新的 URL(即当模板没有更改但 Javascript 更改时)。
有没有办法强制 Jinja 每次重新评估某个过滤器而不缓存结果?
编辑 1 :我们对过滤器使用常量输入(文件名)。
最佳答案
经过大量的谷歌搜索,我终于找到了真正的解决方案。 Jinja有一个特殊的 helper 叫contextfilter您可以使用它来装饰您的函数,使您的过滤器能够感知上下文(并且依赖于上下文)。 Jinja 字节码缓存不会缓存这个计算值,即使常量作为输入传递。
在 Python 中的过滤器中:
from jinja2 import contextfilter
@contextfilter
def asset_url(context, url):
return some_url_thing(url)
在您的模板中:
<link rel="stylesheet" href="{{ 'styles.css' | asset_url }}" />
关于jinja2 - 禁用某些过滤器的 Jinja 模板缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20654274/