默认情况下,当使用内置服务器( Flask.run
)运行Flask应用程序时,它会监视其Python文件,并在代码更改时自动重新加载应用程序:
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
不幸的是,这似乎仅适用于* .py文件,我似乎没有找到任何方法将此功能扩展到其他文件 . 最值得注意的是,当 template 更改时,让Flask重新启动应用程序非常有用 . 我已经不知道有多少次我在模板中摆弄标记并且因为没有看到任何变化而感到困惑,只是发现应用程序仍在使用旧版本的Jinja模板 .
那么,有没有办法让Flask监控文件存在于模板目录中,还是需要潜入框架的源代码?
Edit :我真的在其他任何平台上试过这个 .
经过进一步调查,我发现模板中的更改确实实时更新,无需重新加载应用程序本身 . 但是,这似乎仅适用于传递给 flask.render_template
的那些模板 .
但实际上,在我的应用程序中,我有很多可重用的参数化组件,我在Jinja模板中使用它们 . 它们实现为 {% macro %}
,驻留在专用"modules"中,并且 {% import %}
编辑为实际页面 . 所有不错和DRY ...除了那些导入的模板显然从未检查过修改,因为它们根本没有通过 render_template
.
(奇怪的是,对于通过 {% extends %}
调用的模板不会发生这种情况 . 至于 {% include %}
,我不知道因为我没有真正使用它们 . )
总而言之,这种现象的根源似乎介于Jinja和Flask或Werkzeug之间 . 我想这可能需要为这些项目之一的bug追踪器旅行:)同时,我已经接受了jd . 's answer because that'是我实际使用的解决方案 - 它就像一个魅力 .
7 回答
根据我的经验,模板甚至不需要重新启动应用程序来刷新,因为它们应该在每次调用
render_template()
时从磁盘加载 . 也许您的模板使用方式不同 .要在模板更改(或任何其他文件)时重新加载应用程序,可以将
extra_files
参数传递给Flask().run()
,这是要监视的文件名集合:对这些文件的任何更改都将触发重新加载器 .例:
看这里:http://werkzeug.pocoo.org/docs/0.10/serving/?highlight=run_simple#werkzeug.serving.run_simple
您可以使用
来自http://flask.pocoo.org/docs/1.0/config/
使用
jinja
模板时,需要设置一些参数 . 在我使用python3的情况下,我使用以下代码解决了它:实际上对我来说
TEMPLATES_AUTO_RELOAD = True
不起作用(0.12版本) . 我使用jinja2和我做了什么:before_request
对我有用的只是添加:
(取自@ dikkini的回答)
在Windows上使用最新版本的Flask,使用run命令并将debug设置为true;无需重置Flask即可更改要生效的模板 . 尝试Shift F5(或Shift加上重新加载按钮)以确保没有缓存任何内容 .
见http://flask.pocoo.org/docs/1.0/quickstart/并使用
FLASK_ENV=development