Django autoreload:添加监视的fi

2024-05-05 16:46:18 发布

您现在位置:Python中文网/ 问答频道 /正文

当我的项目中的源文件发生更改时,django服务器将重新加载。我想把它扩展到非Python源文件。我使用原生SQL查询,这些查询存储在单独的文件中(例如big_select.sql),并且我希望服务器在这些文件发生更改时重新加载。在

我在Windows上使用django。在

我尝试过添加.py扩展,但没有成功。在


Tags: 文件项目djangopy服务器sqlwindowsselect
1条回答
网友
1楼 · 发布于 2024-05-05 16:46:18

Django>;=2.2

autoreloading得到了一次重大的改进(感谢@Glenn,他通知了this comment中即将到来的更改),这样就不必再使用未记录的Django特性并将文件附加到_cached_filenames中。相反,注册自定义信号侦听器,监听自动重读启动:

# apps.py
from django.apps import AppConfig
from django.utils.autoreload import autoreload_started


def my_watchdog(sender, **kwargs):
    sender.watch_file('/tmp/foo.bar')
    # to listen to multiple files, use watch_dir, e.g.
    # sender.watch_dir('/tmp/', '*.bar')


class EggsConfig(AppConfig):
    name = 'eggs'

    def ready(self):
        autoreload_started.connect(my_watchdog)

Django<;2.2

Django将监视的文件路径存储在django.utils.autoreload._cached_filenames列表中,因此向其中添加或删除项将强制Django启动或停止监视文件。在

至于你的问题,这是(有点老套的)解决办法。为了演示的目的,我修改了apps.py,这样文件在django初始化之后就开始被监视了,但是可以随意地将代码放在任何您想放的地方。首先,将文件创建为django只能查看已存在的文件:

^{pr2}$

在django应用程序中:

# apps.py
from django.apps import AppConfig
...
import django.utils.autoreload


class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        ...
        django.utils.autoreload._cached_filenames.append('/tmp/foo.bar')

现在启动服务器,在另一个控制台中修改监视的文件:

$ echo baz >> /tmp/foo.bar

服务器现在应该触发自动重新加载。在

相关问题 更多 >