【问题标题】:How to automatically reload Django when files change?文件更改时如何自动重新加载Django?
【发布时间】: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 开发人员推荐的这样做方式是什么?

我找不到任何详细、全面的文档 - 只有不完整的讨论 herethere

【问题讨论】:

  • 要实现与 gunicorn / runserver 重新加载的奇偶性,请在 Procfile 中使用 --reload 标志。不幸的是,我没有很好的浏览器重新加载答案。

标签: python django web-applications livereload


【解决方案1】:

您不需要浏览器扩展来完成自动刷新。看看https://github.com/tjwalch/django-livereload-server

我在https://stackoverflow.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 的自动保存功能。

          使用此功能,每当您对代码进行更改时,它都会保存所有内容并触发服务器重新加载。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-05-07
            • 2010-10-27
            • 1970-01-01
            • 2011-10-10
            • 2013-11-05
            • 2016-06-12
            • 2010-11-17
            相关资源
            最近更新 更多