2011-02-01 14 views
13

Al igual que cualquier otro usuario del usuario django, sirvo archivos estáticos. He elegido usar django-staticfiles para estar listo para django 1.3 que básicamente lo integrará into the core.Django: css haciendo referencia a medios en archivos estáticos (django dev/1.3/archivos estáticos)

Mi pregunta es bastante simple en realidad, esto funciona muy bien para unir múltiples fuentes de medios y hacer referencia a ellos de manera uniforme en las plantillas django. Sin embargo, a menudo utilizar fondos de imágenes en Css este modo:

#itemname { background-image: url('/path/to/image.png'); } 

Mi pregunta es simple - si utilizo nombres absolutos, tengo que codificar ellos. Si uso nombres relativos, moviendo a "subdirectorio" urls desordena la ubicación del recurso para estos elementos y no se pueden cargar.

Entonces, ¿cómo extiendo esta solución a CSS? Dicha solución debe evitar:

  • Incrustación css en html. Yo personalmente evito esto.
  • Usando las URL codificadas. Esto no funciona muy bien porque en mi configuración local normalmente uso 'localhost/project' con Apache para probar (mod_wsgi) mientras que tiendo a usar project.com para la implementación.

Ideas?

Respuesta

19

Dijiste que tenías problemas con las rutas relativas, pero no entiendo exactamente lo que querías decir.

Me encontré con el mismo problema, y ​​he utilizado rutas relativas para resolverlo. Lo único que hay que tener en cuenta es que al implementar las imágenes es necesario (obviamente) permanecer en la misma ruta en relación con los archivos CSS.

Mi configuración en pocas palabras:

Nota Todavía estoy usando Django Django staticfiles con 1.2, pero debería funcionar de manera similar para Django 1,3

STATIC_URL = "/site_media/static/" 
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static") 
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, "static_media"), 
) 

Entonces me sirven al CSS desde {{ STATIC_URL }}css/style.css que hace referencia a imágenes en ../images/logo.png.

y mi proyecto tiene el siguiente aspecto:

project_dir 
    ... 
    stuff 
    static_media 
    ... 
    css 
    images 

, hágamelo saber si usted tiene alguna pregunta, y voy a aclarar.

+0

El bit del que no estoy seguro, ahora lo has respondido: ¿son las URL css 'background-image' relativas al archivo css, o la URL desde la que se está publicando la página?Si el primero, estoy ordenado, porque puedo usar exactamente lo que ha descrito. –

+0

Acabo de probarlo: el pariente parece funcionar en CSS. Estoy feliz con eso. Tiene un tic! –

+0

@John, es PROJECT_ROOT también definido en algún lugar por usted o Django lo define automáticamente como su raíz actual del proyecto (donde está mintiendo su manage.py). Si define PROJECT_ROOT usted mismo, necesita seguir cambiando según si está en el entorno de desarrollo o en el entorno de producción (como la estructura de directorios) de ambos, puede ser diferente – David

1

Ok,

No sé si hay algo mal con @ solución de John pero no funcionó para mí entonces me puso este código en el CSS

{% load static %} 
{% get_static_prefix as STATIC_PREFIX %} 

y

<link rel="stylesheet" href="{{ STATIC_PREFIX }}css/main.css"> 

Espero que ayude!

+0

Esto significa que toda su hoja de estilos se debe analizar como una plantilla ... ¡piense en almacenarlos en caché! – Stefano

Cuestiones relacionadas