Django:当 DEBUG=False 时,为什么我的静态文件没有显示并且总是给我一个 404 错误?

Django: Why are my static files not showing up and always giving me a 404 error when DEBUG=False?

我正在 Windows 机器上工作,试图为名为 "portal" 的项目开发多个应用程序。在处理它之后,我设置了 DEBUG=False,现在我所有的静态文件在加载任何页面后都给我一个 404 错误。当在 CMD 中 运行 python manage.py runserver 时,我在加载页面时得到这个:

[02/Dec/2018 14:10:14] "GET /account/sign-in HTTP/1.1" 200 6249
[02/Dec/2018 14:10:14] "GET /static/fonts/fonts.css HTTP/1.1" 404 96
[02/Dec/2018 14:10:14] "GET /static/css/argon.css HTTP/1.1" 404 94
[02/Dec/2018 14:10:14] "GET /static/branding/logo.png HTTP/1.1" 404 98

我查看了 20 多篇关于此的帖子,这些帖子大多相同,并且我遵循了他们的所有步骤,例如:

我什至创建了一个新的 Django 测试项目并执行了上述所有这些步骤,它们正在为那个新的测试项目工作。我什至删除了 __pycache__ 中的所有文件并重置了我的迁移和数据库文件。

是否有任何其他可能的安全(我看到其他人使用诸如 --insecure 之类的作弊)解决方案来修复我的项目,以便它可以投入生产,而不是上面的其他解决方案?

所以我更多地研究了 Jon Clements 和其他人所说的关于 Django 如何在 DEBUG=False 时不再处理静态文件的内容,并且您需要一个 HTTP Web 服务器来为这些文件提供服务。这实际上是 true。我以前从没想过,因为我的其他项目仍然提供静态文件,但这可能是因为我的浏览器缓存了这些文件。

这是另一个 post 证明了这一点:
Why does DEBUG=False setting make my django Static Files Access fail?

这是一个根据代码托管位置提供静态文件的解决方案:

在此处了解有关 Django 静态文件部署(官方文档)的更多信息:Deploying static files

补充一下@Alvin Tang, 为了在 DEBUG = False 时在生产中测试您的项目,您可以 运行 服务器使用: python manage.py runserver --insecure 。这假定错误的调试设置,模仿生产环境,并且 deploys 您的项目按预期方式为您的静态文件提供服务(或者至少这是我认为的),前提是您的静态设置是正确的- 在大多数情况下都是如此。 经过测试并在 Django 上工作 == 3.0.6