当debug = false时,Django媒体文件不起作用

时间:2019-04-25 05:24:24

标签: django django-views

settings.py

STATIC_URL = '/static/'
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'staticfiles')]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_ROOT = os.path.join(BASE_DIR, 'data')
MEDIA_URL = '/data/'

urls.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

handler404 = 'generic.views.invalid_request'

当我设置DEBUG = False并使用以下命令运行服务器时 python manage.py runserver --insecure所有静态文件均已成功投放,但没有出现媒体文件。在调试控制台中,媒体网址会引发错误500。

3 个答案:

答案 0 :(得分:0)

static辅助功能does not work在DEBUG = False模式下。而且不应该。在产品is not recommended中使用Django提供静态/媒体文件。配置您的网络服务器(NginxApache ..)以提供这些文件。

error 500-调查日志文件以了解导致应用程序故障的原因。 static file are serve successfully可能是从浏览器缓存中提取的。

答案 1 :(得分:0)

我一直在使用 WhiteNoise ,它允许您的Web应用程序提供自己的静态文件,使其成为一个独立的单元,可以在不依赖于Nginx,Amazon S3的情况下部署到任何地方或任何其他外部服务。

1-使用pip安装:

  

pip install whitenoise

2 -编辑您的settings.py文件并将 WhiteNoise 添加到MIDDLEWARE_CLASSES列表中,除了Django的{{1} }:

SecurityMiddleware

就是这样,无需配置任何第三方服务器即可提供静态文件。

答案 2 :(得分:0)

为了在DEBUG为False(且没有第三方库)时提供MEDIA_URL,您可以执行以下操作:

  from django.views.static import serve as mediaserve
  urlpatterns.append(url(f'^{settings.MEDIA_URL.lstrip("/")}(?P<path>.*)$',
                     mediaserve, {'document_root': settings.MEDIA_ROOT}))