当前错误(Debug = False)
" [16 / Jan / 2018 15:18:42]" GET /static/style.css HTTP / 1.1" 404 90"
网站加载但格式错误,因为未加载CSS文件
日志记录:
在CMD提示符上显示
"[16/Jan/2018 15:49:05] "GET /beginners/ HTTP/1.1" 200 3760
[16/Jan/2018 15:49:05] "GET /static/style.css HTTP/1.1" 404 90
"
我不确定为什么这不起作用:我的style.css位于我的静态文件夹中,静态文件夹与manage.py
相同当我设置Debug = True时,我重新加载页面并且它工作正常 - 我的静态文件夹处于活动状态并且我没有出现静态错误:
[16/Jan/2018 15:58:11] "GET /beginners/? HTTP/1.1" 200 3759
[16/Jan/2018 15:58:11] "GET /static/style.css HTTP/1.1" 200 5014
请帮助!!
STATIC_URL = '/static/'
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
DEBUG = True
ALLOWED_HOSTS = ['127.0.0.1']
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
答案 0 :(得分:1)
你正在使用Django的开发服务器,Debug = False。当Debug为False时,Django不会提供静态内容。
Django开发服务器不适合在生产中使用。
您将需要一个Web服务器,它将为您的静态内容提供服务(或将其放在CDN上)
与Django一起使用的常见部署样式是
nginx - > uwsgi - > django的
apache - > mod_wsgi - > django的
还有枪炮,相对容易设置。
答案 1 :(得分:1)
上述答案并非完全正确......还有另一种方式!我永远想弄清楚:(
步骤1:如果您正在/正在使用它们,请确保删除 WhiteNoise 和 django_heroku 的所有痕迹:来自导入,INSTALLED_APPS,虚拟环境等。
第2步:
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "path/to/other/static/dir"),
]
对我而言,关键是使用由STATICFILES_STORAGE设置的适当存储引擎。 您不需要设置STATIC_ROOT,因为引擎会为您生成根。有关详情,请参阅此处的警告部分:https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-STATIC_ROOT
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1']
然后终于
$ python manage.py collectstatic
$ python manage.py runserver
如果这没有帮助,请不要忘记记录:With DEBUG=False, how can I log django exceptions to a log file
这种帮助:https://docs.djangoproject.com/en/1.11/howto/static-files/
答案 2 :(得分:0)
默认情况下,当生产中的DEBUG = False时,django将不提供静态文件。
部署应用程序后,您需要运行 python manage.py collectstatic
,将所有静态文件放入STATIC_ROOT。
我介绍了Whitenoise,它允许您的Web应用程序提供其自己的静态文件。它可以与任何WSGI兼容的应用程序一起使用。
要安装它,请运行:
pip install whitenoise
编辑您的settings.py文件,并将WhiteNoise添加到MIDDLEWARE_CLASSES列表中,除Django的SecurityMiddleware之外,位于所有其他中间件之上:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
保存并重新启动服务器
最后,如果要使用gzip功能,请将其添加到settings.py
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
保存并重新启动