2012-07-10 9 views
5

Estoy usando Django 1.3.1 y la aplicación contrib.collectstatic para administrar mis archivos estáticos.django collectstatic overriding

Mi estructura del proyecto es

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

donde static-media es una carpeta que contiene los archivos estáticos para este proyecto. En mi settings.py tengo:

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

estoy usando admin_tools para cambiar el diseño de la administración. Sin embargo, quiero anular un archivo css específico (theming.css) de admin_tools. Entonces en mi carpeta de medios estáticos puse admin_tools/css/theming.css. Cuando ejecuto por primera vez python manage.py collectstatic, funciona como se esperaba ignorando el valor predeterminado de theming.css en admin_tools y utilizando el que definí en static-media. Desafortunadamente, si ejecuto el comando nuevamente, anula mi CSS y agrega el predeterminado.

Aquí está la salida para 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 

Cualquier ayuda se agradece. Gracias.

Respuesta

2

Actualicé a Django 1.4 y el problema ya está resuelto.

No estoy seguro de qué lo causó.

7

El Django docs decir solamente:

nombres de archivos duplicados son por defecto resuelto de una manera similar a cómo funciona la resolución de plantilla: el archivo que se encuentra en primer lugar en una de las ubicaciones especificadas será utilizado. Si está confundido, el comando findstatic puede ayudarlo a mostrar qué archivos se encuentran.

Basado en su salida de findstatic, el primero debe ser su estilo personalizado, y por lo tanto debe ser el que se recoge. Por qué no está haciendo eso es un misterio.

Siempre puede ignorar explícitamente el otro archivo. Es un poco de dolor, pero va a garantizar que su estilo no recibe sobrescrito:

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

Si necesita hacer caso omiso de otros archivos, así, puede seguir añadiendo --ignore <pattern>. Sin embargo, esta no es una solución viable a largo plazo.

Cuestiones relacionadas