文件更改时如何自动重新加载Django?
Posted
技术标签:
【中文标题】文件更改时如何自动重新加载Django?【英文标题】:How to automatically reload Django when files change? 【发布时间】:2013-10-06 08:18:00 【问题描述】:如何自动监控 .py、.js 和其他源代码文件以重新启动 Django(或任何其他相关)应用程序并在源代码更改时刷新浏览器?这在 Rails 中使用 Guard 是可能的,在 JS 应用程序中使用 grunt-contrib-watch 和随附的 livereload 浏览器插件。对于 Django 等 Python Web 应用程序,我该如何做?
我启动我的 Django 服务器
foreman start
这是我的 Procfile:
web: newrelic-admin run-program gunicorn app.wsgi
按照 Heroku/Newrelic 文档或通常的建议
python manage.py runserver
runserver
方法确实会在 .py 源更改时重新启动服务器,但不会重新启动浏览器,也不会监视其他文件 - 我可以在它旁边运行 guard,但是我有两个进程需要处理,而 grunt 或 rake 提供统一的接口。我想知道 Python 开发人员推荐的这样做方式是什么?
我找不到任何详细、全面的文档 - 只有不完整的讨论 here 和 there。
【问题讨论】:
要实现与 gunicorn / runserver 重新加载的奇偶性,请在 Procfile 中使用 --reload 标志。不幸的是,我没有很好的浏览器重新加载答案。 【参考方案1】:您不需要浏览器扩展来完成自动刷新。看看https://github.com/tjwalch/django-livereload-server。
我在https://***.com/a/36961244/2950621 上发布了一个更广泛的答案
它通过使用 manage.py 命令(服务器)来监控您的 .js 和其他静态文件。服务器通过 websockets 向浏览器发送信号。每个页面上都注入了一些客户端代码。注入的代码响应信号并刷新浏览器。
【讨论】:
【参考方案2】:安装这个 django 应用:
pip install django-livesync
在您的 django 设置文件中添加如下内容:
INSTALLED_APPS = (
'...',
'livesync',
'django.contrib.staticfiles',
'...',
)
MIDDLEWARE_CLASSES = (
'livesync.core.middleware.DjangoLiveSyncMiddleware',
)
如果您正在使用,请注意在“django.contrib.staticfiles”之前注册“livesync”。
现在,启动您的开发服务器:
python manage.py runserver
查看更多详情:https://github.com/fabiogibson/django-livesync
【讨论】:
我知道你的 repo 和这个答案已经有四年的历史了,但是仅仅按照你的指示我的 Firefox (ver. 94) 不会重新加载 DJango 模板。 2021 年是否需要更多配置?【参考方案3】:使用python manage.py runserver
是最常用的。您必须使用另一个工具,例如:http://livejs.com/ 来刷新浏览器本身,因为 Django 真的不知道它。
【讨论】:
【参考方案4】:对所有显式刷新感到沮丧,我为 Firefox 和 Chrome 创建了一个浏览器扩展程序来自动执行此操作。该扩展适用于您添加到 INSTALLED_APPS 中的应用列表的 Django 应用。您可以通过 github repo 了解更多信息。
虽然 repo 包含完整的源代码,但扩展程序也可以在相应的网上商店中获得。只需搜索“Django 自动刷新”。有了这些,您只需将应用程序复制到我们项目的文件夹中并通过 INSTALLED_APPS 包含它。我想添加一个 pip 设置脚本,但还没有找到时间。
HTH。如果这听起来像是自我推销,我们深表歉意。
【讨论】:
【参考方案5】:我在这里尝试了几个答案。但是浏览器似乎没有显示最近的代码更改。当我以隐身模式打开 Chrome 时,它对我有用。
【讨论】:
【参考方案6】:如果您使用的是 Visual Studio Code,那么您可以使用 python manage.py runserver
并使用 VS Code 的自动保存功能。
使用此功能,每当您对代码进行更改时,它都会保存所有内容并触发服务器重新加载。
【讨论】:
以上是关于文件更改时如何自动重新加载Django?的主要内容,如果未能解决你的问题,请参考以下文章
Django:当本地 .py 文件更改并动态加载时,有没有办法防止开发服务器重新启动?