【问题标题】:Django not serving media files when DEBUG is turned to False当 DEBUG 设置为 False 时,Django 不提供媒体文件
【发布时间】:2019-01-05 12:04:25
【问题描述】:

DEBUG = False 时,Django 不提供我的媒体文件。

这是我的代码

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')

我尝试了几件事,但都没有奏效。
如果您知道我的问题的答案,请帮助我!

【问题讨论】:

标签: python django django-staticfiles django-settings


【解决方案1】:

我最近遇到了类似的问题。

在开发中,Django 开发服务器提供Django docs 中记录的静态文件。如果settings.DEBUGFalse,则开发服务器停止提供静态文件。请参阅此 Stack Overflow 帖子:Why does DEBUG=False setting make my django Static Files Access fail?

除了这些配置步骤之外,您还需要实际提供静态文件。

在开发过程中,如果你使用 django.contrib.staticfiles,这将在 DEBUG 设置为 True 时由 runserver 自动完成(参见 django.contrib.staticfiles.views.serve())。

此方法效率极低且可能不安全,因此不适合生产。

对于生产,有提供静态文件的选项as documented here.

我解决了在Dokku 实例上提供静态文件的问题——这是你见过的最小的 PaaS 实现——类似于 Heroku。

我使用了一个名为Whitenoise 的包,在this blog post 中进行了讨论。

我发现 Whitenoise 是为小型 Django 应用程序提供静态文件的最简单解决方案,而无需配置单独的静态文件服务器。

【讨论】:

  • 我已经按照帖子的步骤进行操作,但仍然无法正常工作。我可以在本地和生产环境中成功上传文件,但无法访问它们。当 DEBUG 设置为 False 时,这个问题就消失了
【解决方案2】:

如果您想部署您的 django 项目最佳实践,请设置 DEBUG=FalseALLOWED_HOSTS=['your_host'],然后使用命令 ./manage.py collectstatic

收集您的静态和媒体文件

【讨论】:

  • 我电脑中的这段代码正在运行,你得到的错误响应是什么?
  • 我的问题在于位于静态文件中的媒体文件。当 DEBUG 设置为 False 时,Django 可以很好地提供静态文件,但不能提供媒体文件
【解决方案3】:

正如我所见,您的问题是关于媒体文件的,但如果我们在部署级别看到它们,则给出的答案是关于静态文件的。对于静态文件,您可以简单地使用 whitenoise。这将完美地工作。它也适用于媒体文件,但仅适用于 DEBUG = True 并且时间较短(例如,如果您将应用部署在使用诸如 heroku 之类的 dynos 的某个平台上,则 dynos 在特定时间后刷新。在 heroku这是 30 分钟,之后无论调试设置为 true 还是 false,媒体文件都将被删除。)这在部署过程中是不安全的。因此,为了使您的媒体文件正常工作,您需要一些第三方支持来为您的媒体提供服务文件到您的站点,例如 Amazon S3 存储桶,它将存储您的媒体文件并将它们提供给您的网站。 希望你得到答案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 2019-06-01
    • 2019-12-02
    • 2020-10-27
    • 2012-11-27
    • 2018-06-05
    • 2020-05-21
    • 2010-09-12
    相关资源
    最近更新 更多