python - 当 DEBUG 设置为 False 时,Django 不提供媒体文件
问题描述
当DEBUG = False
.
这是我的代码:
DEBUG = False
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')
我已经尝试了几件事,但都没有奏效。
如果您知道我的问题的答案,请帮助我!
解决方案
我最近有一个类似的问题。
在开发中,Django 开发服务器提供Django 文档中记录的静态文件。如果settings.DEBUG
是False
,则由开发服务器提供的静态文件停止。请参阅此 Stack Overflow 帖子:为什么 DEBUG=False 设置使我的 django 静态文件访问失败?
除了这些配置步骤之外,您还需要实际提供静态文件。
在开发过程中,如果您使用 django.contrib.staticfiles,这将在 DEBUG 设置为 True 时由 runserver 自动完成(参见 django.contrib.staticfiles.views.serve())。
这种方法效率极低并且可能不安全,因此不适合生产。
对于生产,有提供静态文件的选项,如此处所述。
我解决了在生产环境中在Dokku实例上提供静态文件的问题——你见过的最小的 PaaS 实现——它类似于 Heroku。
我使用了一个名为Whitenoise的包,在这篇博文中进行了讨论。
我发现 Whitenoise 是为小型 Django 应用程序提供静态文件的最简单解决方案,而无需配置单独的静态文件服务器。
推荐阅读
- oracle - Visual Studio 2017 - 数据连接 - 添加 Oracle DB
- json - React TypeError:循环对象值嵌套
- mysql - /usr/bin/docker-current: 解析参考时出错.. 参考格式无效
- r - Use dynamic names for CJ in data.table
- android - 如何调整fab按钮内的图标大小
- angularjs - $uibModal 在第一次点击时没有加载正确的内容
- java - 在 kotlin/Java 中设计 Compose 对象
- checkbox - 如何在 Flutter 中为 Checkbox 添加标签(标题文本)?
- javascript - 在 Firebase 中添加便利功能
- javascript - 用两个日期之间的日期填充对象数组