Django全局静态文件未加载

Posted

技术标签:

【中文标题】Django全局静态文件未加载【英文标题】:Django global static files not loading 【发布时间】:2017-02-22 02:12:56 【问题描述】:

我想为我的所有应用程序提供全局静态文件和模板。我的应用程序也将有模板和静态文件它看起来像这样:

我正在加载像这样的全局文件,但它不起作用。

% load staticfiles %

href="% static  'bootstrap/css/bootstrap.min.css' %"

我得到:

“NetworkError: 500 内部服务器错误 - http://localhost:8000/static/bootstrap/css/bootstrap.min.css”

顺便说一句,我可以访问我的静态应用程序而不是全局应用程序,我调试了 STATIC_ROOT 和 PROJECT_ROOT,它们看起来不错。

PROJECT_ROOT ='C:\\webpages\\client_portal\\client_portal'

projectname]/                  <- project root 
├── [projectname]/              <- Django root
│   ├── __init__.py
│   ├── settings/
│   ├── urls.py
│   └── wsgi.py
├── apps/
│   └── __init__.py
│
├── manage.py
│
├── static/
│   └── GLOBAL STATIC FILES
└── templates/
    └── GLOBAL TEMPLATES

我的 settings.py 如下所示:

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

STATIC_ROOT = os.path.join(PROJECT_ROOT, '/static')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, '/static'),
)

【问题讨论】:

尝试将 static_root 保留为空字符串,然后检查是否可以访问静态文件。 【参考方案1】:

STATIC_ROOT 和 STATICFILES_DIRS 不应相同。创建一个不同的目录,例如staticfiles,来存储您的开发静态文件并在 STATICFILES_DIRS 中使用它。

【讨论】:

【参考方案2】:

我认为您的问题是STATICFILES_DIRS 中有一个不需要的正斜杠。所以改变这个:

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, '/static'),
)

到这里:

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

希望它有所帮助,它在 Django 2.0 中对我有用,不需要使用 PROJECT_ROOTSTATIC_ROOT

【讨论】:

以上是关于Django全局静态文件未加载的主要内容,如果未能解决你的问题,请参考以下文章

Heroku静态文件未加载,Django

Django 静态文件未加载且没有错误迹象

全局加载 Django“静态”模板标签库,而不在每个文件中显式加载它

django+nginx 部署未正确加载静态文件

cPanel:Django Admin Portal 未加载静态/CSS 文件

DJANGO:静态文件未在实时服务器中加载(但在本地加载)?