2012-07-10 12 views
5

Używam aplikacji Django 1.3.1 i contrib.collectstatic do zarządzania moimi statycznymi plikami.Nadpisywanie danych Django

Moja struktura projektu jest

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

gdzie static-media jest folder zawierający pliki statyczne dla tego projektu. W moim settings.py mam:

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'), 
) 

Używam admin_tools aby zmienić układ administratora. Jednak chcę zastąpić określony plik css (theming.css) z narzędzi administracyjnych. Tak więc w moim folderze mediów statycznych umieszczam admin_tools/css/theming.css. Po pierwszym uruchomieniu python manage.py collectstatic działa zgodnie z oczekiwaniami, ignorując domyślny plik theming.css w elemencie admin_tools i używając tego, który zdefiniowałem na nośnikach statycznych. Niestety, jeśli ponownie uruchomię komendę, zastępuje ona moje css i dodaje wartość domyślną.

Oto wyjście dla 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 

Każda pomoc jest mile widziana. Dzięki.

Odpowiedz

2

Zaktualizowałem do Django 1.4 i problem został rozwiązany.

Nie jestem pewien, co spowodowało to.

7

Django docs tylko powiedzieć:

nazwy duplikaty plików są domyślnie rozwiązany w sposób podobny do tego, jak działa szablon rozdzielczości: plik, który pierwszy znalazł się w jednej z wymienionych lokalizacji zostaną wykorzystane. Jeśli jesteś zdezorientowany, polecenie findstatic może ci pokazać, które pliki są znalezione.

Na podstawie danych wyjściowych z findstatic pierwszy powinien być Twoim niestandardowym stylem i powinien być tym, który został zebrany. Dlaczego tak nie jest, to tajemnica.

Zawsze można po prostu zignorować inny plik jawnie. Jest to trochę uciążliwe, ale to gwarantuje, że Twój styl nie dostać nadpisane:

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

Jeśli trzeba ignorować innych plików, jak również, można zachować dodając --ignore <pattern>. Jest to wprawdzie mało prawdopodobne długoterminowe rozwiązanie.

Powiązane problemy