How to ignore directories when running Django collectstatic?

13,775

Solution 1

Don't write full path of directories. For example usage:

python manage.py collectstatic --noinput -i admin

This command won't copy the admin/ directory to STATIC_ROOT path.

Solution 2

The Django 2.2 release has finally addressed the very longstanding issue of specifying ignore parameters with path matching, for example

manage.py collectstatic --ignore /vendor/*.js

should then work.

Share:
13,775
Mentakatz
Author by

Mentakatz

Web developer. Specialized in Django and Drupal based projects, electronic commerce and user experience.

Updated on July 28, 2022

Comments

  • Mentakatz
    Mentakatz almost 2 years

    I am running a small test project with Django 1.3, Ubuntu 11.10, gunicorn and Nginx, everything in a virtualenv, and now I'm running collectstatic to get my static files into the directory that Nginx serves from.

    For simplicity's sake let's say my static directory is something like /home/user/static and my project is at /home/user/project

    When I go to /home/user/project I run:

    python manage.py collectstatic --noinput
    

    and it correctly copies static files from all the apps I have installed. Unfortunately this also copies the files from Django's admin and I would like to skip that one.

    I checked the documentation for collecstatic and there´s an -i (--ignore) parameter that takes a glob-style parameter so I tried different variations of the command, as I´m not sure if the ignore pattern refers to my /home/user/static or to the original app directory.

    Here some examples that didn´t work:

    python manage.py collectstatic --noinput -i /home/user/static/admin
    python manage.py collectstatic --noinput -i /home/user/static/admin/*
    python manage.py collectstatic --noinput -i /home/user/static/a*
    python manage.py collectstatic --noinput -i /home/alexis/.virtualenvs/django13/*
    python manage.py collectstatic --noinput -i /home/user/.virtualenvs/django13/lib/python2.7/site-packages/django/contrib/admin*
    

    I found that if I create a symbolic link from /home/user/static/admin to /home/user/.virtualenvs/django13/lib/python2.7/site-packages/django/contrib/admin/media collectstatic will notice and skip copying those files again but anyway, I´d like to make the --ignore option work as it should.

    What am I missing?

    Thanks for the help!

  • Sachin
    Sachin over 11 years
    Suppose we have to ignore files of a certain type so would the following work python manage.py collectstatic --noinput -i *.styl where the files I want to be ignored have extension .styl?
  • tatlar
    tatlar over 11 years
    Yes. Example: python manage.py collectstatic --noinput -i *.sass
  • Phil Gyford
    Phil Gyford over 9 years
    How would I add multiple ignores? eg, ignore anything with admin in the path and any *.scss files?
  • Daniel Hawkins
    Daniel Hawkins over 9 years
    manage.py help collectstatic says: -i PATTERN, --ignore=PATTERN Ignore files or directories matching this glob-style pattern. Use multiple times to ignore more. so @PhilGyford you would use something like: -i admin -i *.scss
  • Богуслав Павлишинець
    Богуслав Павлишинець almost 3 years
    Can I specify a file that contains ignores like .gitignore or .gcloudignore?
  • Mark Chackerian
    Mark Chackerian almost 3 years
    no, you have to explicitly list the files to ignore -- but you could create a script to convert
  • Богуслав Павлишинець
    Богуслав Павлишинець almost 3 years
    Then it is probably better to write some bash script that will run ./manage.py with all needed ignores.