2009-06-21 9 views
36

En las plantillas de Django, es común para hacer lo siguiente:Django URL de medios de comunicación en los archivos CSS

<img src="{{ MEDIA_URL }}/img/someImage.jpg"> 

¿Cómo lograr esto en un archivo CSS que no sirven como una plantilla?

.someClass { 
    /* can't do this this */ 
    background: url("{{ MEDIA_URL }}/img/someImage.jpg");   
    /* either this */ 
    background: url("http://media.domain.com/img/someImage.jpg"); 
    /* or this */ 
    background: url("/django_static_media/img/someImage.jpg"); 
    /* can't do both... what to do? */ 
} 

Necesito la capacidad de servir a mis archivos ya sea desde el subdominio medios de comunicación, o durante el trabajo fuera de línea y servirlos directamente como una visión estática de Django. Pero los archivos CSS son un problema ya que no se procesan como plantillas y no puedo usar la variable de contexto MEDIA_URL.

¿Cuál es la solución?

Editar: Debo señalar que el problema surge desde mis archivos de medios estáticos son, de hecho, se encuentra en un medio de comunicación independiente subdominio, negando así el uso de rutas relativas. ¡Lo tengo, gracias!

Respuesta

45

¿De dónde se sirve el archivo css? Esto normalmente no es un problema como una estructura común de medios, tales como:

media/ 
    images/ 
    css/ 
    js/ 

(o similar) permite rutas de archivo relativas de imágenes, por ejemplo:

background: url('../images/foo.png'); 

Si usted no está preparado para cambiar la estructura de carpetas de medios para dar cabida a las rutas de archivos relativos, es posible que tenga otra alternativa que sobrescribir declaraciones CSS desde dentro de la plantilla, mediante un archivo CSS secundaria cuando está desconectado:

{% if DEBUG %} 
    <link rel="stylesheet" href="{{ MEDIA_URL }}css/offline-mode.css" /> 
{% endif %} 

Por supuesto la primera opción es mucho más ordenada.

3

¿El uso de rutas relativas (para archivos de imagen) en sus archivos CSS no es una opción viable para usted?

0

Si desea utilizar directivas de plantilla en un archivo, ¿por qué no se sirve a través de una plantilla?

6

Disculpe, no le gustará la respuesta.

Tengo el mismo problema:

No hay manera fácil de hacer esto con los archivos CSS-estáticas servido.

Lo que hago: servidor

  • de depuración, funciona a nivel local, los medios de comunicación a nivel local servido
  • servidor de producción está instalado en algún lugar comercial w/media en Amazon S3
  • archivo settings.py automático establece que MEDIA_URL (de depuración, etc.) a través de cheque nombre de host (para diferenciar la producción frente a/home/depuración local) presenta
  • HTML todos tienen vínculos con css {{}} MEDIA_URL (+ RequestContext contextos para visitas)
  • me gustan los nombres de ruta absolutos, por lo que un guión "update_s3": (1) altera cada archivo CSS está temporalmente para fijar 'url ("/ media' a" url ("s3.mydomain.com/media' y (2) actualizaciones/uploads mi directorio/media a Amazon S3

luego voy a la producción y hacer una actualización svn & toque el archivo WSGI & validar

Cuestiones relacionadas