当前位置: 首页 > 面试题库 >

模板文件更改时重新加载Flask应用

池麒
2023-03-14
问题内容

默认情况下,使用内置服务器(Flask.run)运行Flask应用程序时,它会监视其Python文件并在代码更改时自动重新加载该应用程序:

* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader

不幸的是,这似乎仅适用于* .py文件,而且我似乎没有找到任何将此功能扩展到其他文件的方法。最值得注意的是,当模板更改时,让Flask重新启动应用程序将非常有用。我已经迷失了多少次我不喜欢模板中的标记,却因为看不到任何更改而感到困惑,只是发现该应用程序仍在使用旧版本的Jinja模板。

因此,有没有办法在模板目录中包含Flask监视文件,还是需要深入研究框架的源代码?

编辑:我正在使用Ubuntu 10.10。尚未在任何其他平台上尝试过。

经过进一步的查询,我发现模板中的更改确实是实时更新的,而无需重新加载应用程序本身。但是,这似乎仅适用于传递给的模板flask.render_template

但是碰巧的是,在我的应用程序中,我在Jinja模板中使用了很多可重用的,参数化的组件。它们以{% macro %}s 实现,驻留在专用的“模块”中,并{% import %}编入实际页面。不错,而且很干…除了那些导入的模板显然从未检查过修改,因为它们根本没有通过render_template

(奇怪的是,对于通过调用的模板,这种情况不会发生{% extends %}。至于{% include %},由于不真正使用它们,我不知道。)

因此,总结起来,这种现象的根源似乎在Jinja和Flask或Werkzeug之间。我想对于其中的任何一个项目,都可能需要进行bug跟踪:)同时,我已经接受了jd。的答案,因为这是我实际使用的解决方案-它的工作原理就像一种魅力。


问题答案:

以我的经验,模板甚至不需要重新启动应用程序即可刷新,因为每次render_template()调用时都应从磁盘加载模板。也许你的模板使用方式有所不同。

要在模板更改(或任何其他文件)时重新加载应用程序,可以将extra_files参数传递给Flask().run(),以观察文件名的集合:对这些文件的任何更改都将触发重新加载器。

例:

from os import path, walk

extra_dirs = ['directory/to/watch',]
extra_files = extra_dirs[:]
for extra_dir in extra_dirs:
    for dirname, dirs, files in walk(extra_dir):
        for filename in files:
            filename = path.join(dirname, filename)
            if path.isfile(filename):
                extra_files.append(filename)
app.run(extra_files=extra_files)


 类似资料:
  • 问题内容: 我正在研究如何使用Python开发一个不错的Web应用程序。由于我不希望遇到一些高级结构,因此我的选择落在了轻量级的Flask框架上。时间会证明这是否是正确的选择。 因此,现在我已经使用mod_wsgi设置了Apache服务器,并且我的测试站点运行正常。但是,我想通过使我对py或模板文件进行的任何更改自动重新加载网站,从而加快开发流程。我看到站点的.wsgi文件中的任何更改都会导致重新

  • 当我更改驻留在/templates中的thymeleaf.html文件时,我希望浏览器自动重新加载页面。我已经安装了live reload插件,它能够与Spring Boot服务器进行握手。但是,在修改thymeleaf模板文件时,我必须手动重新加载浏览器。我可能错过了什么。显然,我启用了,并且还手动更新了属性。spring devtools正确地将更改转发到构建目标中的任何模板或控制器,并且通过

  • 我知道这不是react router的默认行为/功能,可以帮助我们轻松地重新加载当前组件,但我真的需要在我的应用程序中使用它。 我的应用程序处理产品。我有一个可以加载的产品列表,当我单击某个项目时,它会显示相关的产品详细信息。 在该页面上,我有加载相同组件的相关产品链接,但有另一个产品详细信息,位于 我在我的组件willmount中获取数据,似乎如果我只更改URL,就不会装载新组件,因此,我总是显

  • 问题内容: 目前看来,对于sails.js应用程序中的任何代码更改,您都必须手动停止sails服务器并再次运行,然后才能看到更改。 我想知道在开发模式下运行时是否有任何方法可以在检测到代码更改时自动重新启动sails服务器? 问题答案: 您必须使用forever,nodemon或其他类似的观察器。 通过运行以下命令 永久 安装: 运行: 为了避免由于Sails写入文件夹而导致无限重启,您可以在项目

  • 正如标题所说,我想改变道具的值,并在外部js文件中重新加载组件。 我怎么能做到这一点?

  • 问题内容: 当用户访问未经授权的个人页面(例如个人资料)时,我的后端302重定向到控制器操作,该操作代替部分个人资料来提供登录部分。由于它302重定向到返回部分操作的动作,因此URL地址栏与用户尝试访问的页面(“ / profile”)没有变化。 我本来打算“修复”该问题,但实际上我认为它可以提供良好的用户体验,而不是将返回网址作为查询参数来处理。 想法是一旦他们登录,我只想重新加载当前路由,也可