是否可以告诉Django开发服务器监听某些文件的更改(不是项目中的常规Python文件,它们已经创建了重新加载)并在这些文件发生更改时重新加载?
我为什么要这样?当我的gulp脚本构建JS和CSS时,它会获取所有文件并向它们添加一个哈希值。我的工作文件 frontend / css / abc.css 将构建到 build / css / abc-hash123.css 。这样,如果自上次部署以来发生了任何变化,浏览器将被迫重新加载内容。构建时,会创建一个包含映射的清单文件。在Django的设置中,我在开始时读取这个清单文件并获取所有这些映射(from this example here)。如果我更改了一个文件,它会获得一个新的哈希值,并写入一个新的清单。当前加载到然后内存是错误的,因此我需要强制重新加载开发服务器以获取新的映射。
澄清:我收到了有关使用VCS的评论。所以只是为了澄清:我使用VCS并检查我的 abc.css 。 abc-hash123.css 会自动构建为构建系统的一部分。
答案 0 :(得分:0)
就doc而言,这不受支持。
这有点hacky,但只是touch
(或以任何其他方式更改时间戳)某些.py
文件或开发服务器观察到的其他文件(例如settings.py
)在你的构建中将完成这项工作。
同样如评论所示,版本控制最好留给VCS。
答案 1 :(得分:0)
有点hacky方式,但我找到了一种方法来强制Django服务器重新加载 build 目录的更改。在对Django自动加载模块进行一些研究之后,我发现它只能从加载到 sys.modules 的模块中收听Python文件的更改。所以,我只需要将构建目录变成Python模块:
在我的构建脚本(gulp)中,在我构建了我的文件之后,我添加了一个步骤来创建 __ init __。py 文件,以使构建目录成为模块。然后我还在这个文件中写了一个注释,其中包含一个时间戳,使其对每个构建都是唯一的:
fs.writeFile('./build/__init__.py', '#' + Date.now())
然后在我的 local.py (本地使用的设置)中,我只是导入这个新模块,因此它出现在 sys.modules 中:
try:
import build
except ImportError:
print("Could not import from build folder. Will not auto reload when building new files.")