Python Django自动加载:添加监视的文件

Python Django自动加载:添加监视的文件,python,django,Python,Django,当我的项目中的源文件发生更改时,django服务器将重新加载。我想将其扩展到非Python源文件。我使用本机SQL查询,它们存储在单独的文件中(例如,big\u select.SQL),我希望服务器在这些文件更改时重新加载 我在Windows上使用django 我尝试添加.py扩展,但没有成功。Django>=2.2 自动阅读被进行了一次大的修改(感谢@Glenn通知了中的传入更改!),因此不再需要使用未记录的Django功能并将文件附加到\u缓存的文件名中。相反,注册自定义信号侦听器,侦听自动

当我的项目中的源文件发生更改时,django服务器将重新加载。我想将其扩展到非Python源文件。我使用本机SQL查询,它们存储在单独的文件中(例如,
big\u select.SQL
),我希望服务器在这些文件更改时重新加载

我在Windows上使用django

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

Django>=2.2 自动阅读被进行了一次大的修改(感谢@Glenn通知了中的传入更改!),因此不再需要使用未记录的Django功能并将文件附加到
\u缓存的文件名中。相反,注册自定义信号侦听器,侦听自动重新加载开始:

# 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公认的答案在Django 3.0.7中不起作用,可能是由于自年以来的更改。 经过
autoreload
后,得出以下结论:

从django.utils.autoreload导入autoreload_开始
#Watch.conf文件
def监视额外文件(发送方、*args、**kwargs):
watch=sender.extra_files.add
#要监视的文件路径列表
监视列表=[
文件1,
文件2,
文件3,
文件4,
]
对于监视列表中的文件:
如果os.path.exists(文件):#个人用例
监视(路径(文件))
自动加载已启动。连接(监视额外文件)

请注意,这是使用未记录的Django API。它与Django 2.0配合得很好(谢谢!),但由于@Glenn中的
Django.utils.autoreload
模块进行了重大重构,它将与Django 2.1分离。谢谢您的提示!您可能指的是未来的
django==3
release,因为该代码适用于当前的2.1.5版本。然而,它确实会与当前的主人决裂;我将很快修改答案。
$ touch /tmp/foo.bar
# 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