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。
答案 0 :(得分:0)
static
辅助功能does not work在DEBUG = False模式下。而且不应该。在产品is not recommended中使用Django提供静态/媒体文件。配置您的网络服务器(Nginx,Apache ..)以提供这些文件。
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}))