当某些文件更改时重新加载Django dev server

2024-09-30 16:29:24 发布

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

是否可以告诉Django开发服务器监听某些文件的更改(不是项目中的常规Python文件,它们已经创建了一个重新加载)并在这些文件发生更改时重新加载?在

为什么我要这个?当我的gulp脚本构建JS和CSS时,它接受所有文件并在它们后面附加一个哈希。我的工作文件前端/css/abc.css公司将被构建到build/css/abc-hash123.css。这样,如果自上次部署以来有任何更改,浏览器将被迫重新加载内容。生成时,将创建包含映射的清单文件。在Django中的设置中,我在开始时读取了这个清单文件并获得了所有这些映射(from this example here))。如果我更改了一个文件,它会得到一个新的哈希值,并且会写入一个新的清单。当前加载到内存中的映射是错误的,因此我需要强制重新加载开发服务器以获取新的映射。在

澄清:我得到了关于使用VCS的意见。所以我只想澄清一下:我使用VCS,并查看我的abc.css公司abc-hash123.css作为构建系统的一部分自动构建。在


Tags: 文件项目django服务器脚本js公司vcs
2条回答

doc而言,这是不受支持的。在

这有点老套,但是只要touch(或以任何其他方式更改时间戳)某个.py文件或开发服务器在构建中观察到的其他文件(例如settings.py)就可以完成这项工作。在

另外,正如评论所说,版本控制最好交给风投。在

有点老套,但我找到了一种方法,可以强制Django服务器在对build目录的更改时重新加载。在对Django autoreload模块进行了一些研究之后,我发现它只监听Python文件上的更改,这些更改来自加载到中的模块系统模块。因此,我只需要将构建目录设为Python模块:

在我的构建脚本(gulp)中,在构建了我的文件之后,我添加了一个步骤来创建\uuinit_u.py文件,使构建目录成为一个模块。然后,我还在这个文件中写了一条注释,其中包含一个时间戳,使其对于每个构建都是唯一的:

fs.writeFile('./build/__init__.py', '#' + Date.now())

然后在我的本地.py(本地使用的设置),我只需导入这个新模块,因此它会出现在系统模块

^{pr2}$

相关问题 更多 >