59

I'm using Django 1.7. When deploying my site to a Production server and running collectstatic, I get following error message:

django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting

I use split settings; my production local.py contains:

STATIC_ROOT = '/home/username/projects/site/static/'

and my base.py contains:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129
SaeX
  • 17,240
  • 16
  • 77
  • 97
  • 2
    possible duplicate of [Can I make STATICFILES\_DIR same as STATIC\_ROOT in Django 1.3?](http://stackoverflow.com/questions/12161271/can-i-make-staticfiles-dir-same-as-static-root-in-django-1-3) – Simeon Visser Nov 30 '14 at 13:32
  • Possible, but searching "django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting" in Google didn't point me to that one. – SaeX Nov 30 '14 at 16:02
  • 1
    That's because you had quotes around it. That question is regarding the same problem. – Simeon Visser Nov 30 '14 at 17:01

10 Answers10

75

According to the docs, collectstatic will copy the files from various folders into STATIC_ROOT.

Therefore, you cannot use the STATIC_ROOT folder in STATICFILES_DIRS.

Solution: change STATIC_ROOT to e.g. STATIC_ROOT = '/home/username/projects/site/assets/'

Bikash kharel
  • 472
  • 7
  • 16
SaeX
  • 17,240
  • 16
  • 77
  • 97
  • 2
    The 'docs' link for Django 1.7 is no longer live, but it works if you increase the Django version number in there from 1.7 to 3.2: https://docs.djangoproject.com/en/3.2/ref/contrib/staticfiles/ – michielbdejong Jul 05 '21 at 12:32
36

I know it is an old post but this solution has worked for me and might help someone else.

In settings.py:

    if DEBUG:
        STATICFILES_DIRS = [
            os.path.join(BASE_DIR, 'static')
       ]
    else:
        STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Luis Valverde
  • 431
  • 4
  • 5
27

I faced same error like this (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting. when i try to use compressor

Main problem is My settings.py file

STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

Remove or comment :

STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

Mr Singh
  • 3,936
  • 5
  • 41
  • 60
  • 7
    then how do you serve static files from the development server? (via `python manage.py runserver`) – Eric Jul 22 '19 at 16:46
  • 2
    will run into the error: raise ImproperlyConfigured("You're using the staticfiles app " django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path. – Xb74Dkjb Oct 11 '19 at 03:12
  • 2
    @Eric it is advised to set `STATIC_ROOT` to say `os.path.join(BASE_DIR, 'var', 'static')` that directory will contain staticfiles copied by django if you execute `collectstatic` command. That command will look for static files in `STATICFILES_DIRS` and if you run `runserver`, then it will serve your static files from `STATICFILES_DIRS` . – Paweł Mucha Dec 18 '19 at 12:16
4

The solution is that the STATIC_ROOT must not be set if you are running the Django development server:

import sys
if sys.argv[1] != 'runserver':
    STATIC_ROOT = os.path.join(BASE_DIR, "static")

Tested with Django 2.1 in a Windows 10 development environment and in an Ubuntu 18.04 docker container on AWS in a production environment.

sneeu
  • 2,602
  • 3
  • 24
  • 27
0

in settings.py set static root to virtual environment so that it collects the static files to folder static_in_env

STATIC_ROOT=os.path.join(VENV_PATH,'static_in_env/')
StupidWolf
  • 45,075
  • 17
  • 40
  • 72
0

You have to enter complete path of static directory:

STATIC_ROOT = '/home/reza/blog/static/'

Or If you want to use Collects the static files into STATIC_ROOT by django-admin collectstatic command you have to use :

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
0

I had this problem in pythonanywhere, added:

STATIC_URL = '/static/'

STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

STATIC_ROOT = '/home/user/project/'

Then run:

python3.9 manage.py collectstatic

It kind of worked, but sent the files in the main directory...

P_0
  • 163
  • 2
  • 7
0

For pythonaywhere:

1 - Add your static root in the setting.py

enter image description here

2 - Update manually the path environment into web app configuration

enter image description here

Florjan
  • 113
  • 5
0

I got the same error below:

The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

Because I set the same folder static to STATIC_ROOT and STATICFILES_DIRS as shown below:

# "settings.py"

STATIC_ROOT = 'static/'
STATICFILES_DIRS = [
    BASE_DIR / 'static/'
]

So, I set the different folder staticfiles to STATIC_ROOT as shown below, then the error was solved:

# "settings.py"

STATIC_ROOT = 'staticfiles/' # Here
STATICFILES_DIRS = [
    BASE_DIR / 'static/'
]
Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129
-3

saw this in Django 1.11 documentation

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Once you make changes to the urls.py as shown above, it should work fine.

Arun Raj
  • 1
  • 4
  • this is not suitable for production. the workaround is only used for local development! – Tony Dec 27 '18 at 00:59