【问题标题】:python bottle webserver caches html filespython Bottle web服务器缓存html文件
【发布时间】:2018-04-13 05:29:12
【问题描述】:

我在 python 中使用了一个 Bottle 网络服务器。在调试时,我想对伪 html 模板文件进行更改,然后重新加载页面以在浏览器中查看。似乎瓶子缓存了模板文件,我无法从新修改的模板中加载它们。

这是我的情况:

第一种方法

  1. 运行web服务器,拉起main.tpl.html
  2. 更改文件名 secondary.tpl.html 到 secondary2.tpl.html
  3. 打开secondary.tpl.html(不再存在)
  4. 得到 404 错误,即。一切顺利

第二种方法

  1. 运行web服务器,拉起main.tpl.html
  2. 打开secondary.tpl.html,工作正常
  3. 将secondary.tpl.html的文件名改为secondary2.tpl.html
  4. 重新加载secondary.tpl.html(不再存在)
  5. 获取不再应该存在的原始secondary.tpl.html网页

我已经强制浏览器再次请求文件(不使用它自己的缓存),并且通过 python 调试器(PyCharm),我可以看到瓶子网络服务器至少假装通过做的动作模板文件应该做的所有事情。

【问题讨论】:

  • 那么run(reloader=True)不会影响模板缓存?
  • 我之前试过run(reloader=True)方法,没有成功。 bottle.TEMPLATES.clear() 成功了

标签: python bottle


【解决方案1】:

来自http://bottlepy.org/docs/dev/stpl.html#bottle.SimpleTemplate

请记住,编译和渲染模板是两个不同的操作,即使 template() 助手隐藏了这一事实。模板通常只编译一次并在内部缓存,但会使用不同的关键字参数多次渲染。

但是http://bottlepy.org/docs/dev/tutorial.html#templates 声明:

缓存

模板在编译后缓存在内存中。在您清除模板缓存之前,对模板文件所做的修改不会产生任何影响。致电bottle.TEMPLATES.clear() 这样做。缓存在调试模式下被禁用。

你可以在http://bottlepy.org/docs/dev/tutorial.html#debug-mode找到它

bottle.debug(True)

在这种模式下,Bottle 更加详细并且提供了有用的信息 发生错误时的调试信息。它还禁用了一些 可能会妨碍您的优化并添加一些检查 警告您可能的错误配置。

以下是调试模式下发生变化的不完整列表:

默认错误页面显示回溯。
不缓存模板。
插件会立即应用。

如果仍然没有帮助,请浏览一下https://github.com/bottlepy/bottle/blob/master/bottle.py#L3937

class SimpleTemplate(BaseTemplate):
    def prepare(self,
            escape_func=html_escape,
            noescape=False,
            syntax=None, **ka):
        self.cache = {}
        ...

这似乎清除了缓存。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2015-08-26
  • 2015-07-06
  • 1970-01-01
  • 2014-06-19
  • 2016-01-20
相关资源
最近更新 更多