文件更改时如何自动重新加载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 文件更改并动态加载时,有没有办法防止开发服务器重新启动?

db更改时在Django中重新加载HTML表

我在 django 中的静态文件不会被重新加载,除非我每次重新启动电脑时都重命名它们

如何自动重新加载我的 gunicorn 服务器?

如何让 Sinatra 在每次更改后自动重新加载文件?

在Docker上自动重新加载Django服务器