Django - CSS文件未在生产中加载(调试:错误)

时间:2018-01-16 07:56:26

标签: python django server

当前错误(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__)))

3 个答案:

答案 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'

保存并重新启动