STATIC_ROOT找不到我的静态文件

时间:2016-09-19 19:34:54

标签: css django django-staticfiles

我是Django的新手,我正试图找到一种方法来加载我的项目中的css文件。这是我的settings.py文件

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    #"django.contrib.staticfiles.finders.AppDirectoriesFinder"
)

AUTHENTICATION_BACKENDS = (
    # Uncomment the following to make Django tests pass:
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
)

我有一种方法可以使用变量STATICFILES_DIRS来完成它,但它不会与其他类似的变量一起使用。

我该怎么办才能修复它?

额外信息:

我的base.html文件静态文件调用:

<link rel="stylesheet" type="text/css" href="{% static 'style.css' %}" />
<link rel="stylesheet" type="text/css" href="{% static 'icomoon_style.css' %}" />
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.min.css' %}" />

我的文件夹处理:

  • OntoLogica(主文件夹)
    • Ontologica(项目文件夹)
    • 静态文件夹
      • icomoon_style.css
      • 的style.css
      • css文件夹
      • bootstrap.min.css

3 个答案:

答案 0 :(得分:0)

以正确的方式设置静态路径。从我的项目中了解一下。

settings.py

import os
import sys
from os.path import abspath, dirname, join

sys.path.append(join(dirname(__file__), "../applications"))
PROJECT_ROOT = abspath(dirname(__file__))

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = join(PROJECT_ROOT, '../media/')
MEDIA_URL = '/media/'
STATIC_ROOT = join(PROJECT_ROOT, '../static/')
STATIC_URL = '/static/'

我的文件结构:

Main directory
              project dir
                        settings.py
                        urls.py
              media
              static folder.

答案 1 :(得分:0)

正如docs

的“警告”部分所述
  

这个[STATIC_ROOT]应该是一个最初为空的目标目录,用于将静态文件从其永久位置收集到一个目录中,以便于部署; 它不是永久存储静态文件的地方

因此,您应该使用STATICFILES_DIRS指向静态文件。

最后请确保在模板中使用{% load staticfiles %}来加载静态文件。

答案 2 :(得分:0)

我找到了解决问题的方法。它在此网站中找到:https://devcenter.heroku.com/articles/django-assets

我要做的事情:

添加行PROJECT_ROOT并将行STATIC_ROOT更改为:

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')

有了这个,我可以毫不费力地添加行STATICFILES_DIRS

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

它对我来说非常有效,我希望它也可以帮助别人。感谢