2012-07-10 12 views
5

Sto utilizzando Django 1.3.1 e l'app contrib.collectstatic per gestire i miei file statici.overriding django collectt

La mia struttura del progetto è

myproject 
    - settings.py 
    - static-media 
    - urls.py 
    - media 
    - manage.py 

dove static-media è una cartella contenente i file statici per questo progetto. Nel mio settings.py ho:

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) 
STATIC_ROOT = os.path.join(PROJECT_PATH, "static")+'/' 
STATIC_URL = "/static/" 
STATICFILES_DIRS = (
     os.path.join(PROJECT_PATH, 'static-media'), 
) 

sto usando admin_tools per modificare il layout del admin. Tuttavia voglio sovrascrivere un file css specifico (theming.css) da admin_tools. Quindi nella mia cartella statica-media ho messo admin_tools/css/theming.css. Quando eseguo per la prima volta python manage.py collectstatic, funziona come previsto ignorando il file theming.css predefinito in admin_tools e utilizzando quello definito in media statico. Sfortunatamente se eseguo di nuovo il comando, sovrascrive il mio css e aggiunge il valore predefinito.

Ecco l'output per python manage.py findstatic admin_tools/css/theming.css:

Found 'admin_tools/css/theming.css' here: 
    /home/paulo/Desktop/Projects/zennetwork/prd/zennetwork/static-media/admin_tools/css/theming.css 
    /home/paulo/Desktop/Projects/zennetwork/prd/lib/python2.7/site-packages/admin_tools/theming/static/admin_tools/css/theming.css 

Ogni aiuto è apprezzato. Grazie.

risposta

2

Ho eseguito l'aggiornamento a Django 1.4 e il problema è stato risolto.

Non sono troppo sicuro di cosa lo abbia causato.

7

L'Django docs solo dire:

nomi di file duplicati sono di default risolto in un modo simile a come modello di risoluzione funziona: verrà utilizzato il file che viene trovato per primo in una delle posizioni specificate. Se sei confuso, il comando findstatic può aiutarti a mostrare quali file sono stati trovati.

In base all'output da findstatic, il primo deve essere il tuo stile personalizzato e dovrebbe quindi essere quello raccolto. Perché non farlo è un mistero.

Si può sempre ignorare l'altro file in modo esplicito. E 'un po' di dolore, ma sarà garantire che il vostro stile non ottiene sovrascritto:

python manage.py collectstatic --ignore site-packages/admin_tools/css/theming.css 

Se avete bisogno di ignorare altri file, così, si può continuare ad aggiungere --ignore <pattern>. Questa non è certamente una soluzione a lungo termine molto valida, però.