将DEBUG设置为False时,Django不提供媒体文件

时间:2018-07-28 17:19:16

标签: python django django-staticfiles django-settings

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

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

3 个答案:

答案 0 :(得分:0)

我最近有一个类似的问题。

在开发中,Django开发服务器按Django docs中所述提供静态文件。如果settings.DEBUGFalse,则开发服务器停止提供静态文件。请参阅此堆栈溢出文章: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应用程序提供静态文件而无需配置单独的静态文件服务器的最简单解决方案。

答案 1 :(得分:0)

如果要部署django项目的最佳实践,请设置DEBUG=FalseALLOWED_HOSTS=['your_host'],然后使用命令 ./manage.py collectstatic 收集静态文件和媒体文件,

答案 2 :(得分:0)

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