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