Pregunta Django Media URLs en archivos CSS


En las plantillas django, es común hacer lo siguiente:

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

¿Cómo lo lograrías en un archivo CSS que no se sirve como 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 mis archivos desde el subdominio multimedia, o durante el trabajo fuera de línea y servirlos directamente como una vista estática django. Pero los archivos CSS son un problema ya que no se procesan como plantillas y no puedo usar el MEDIA_URL variable de contexto.

¿Cual es la solución?

Editar: Debo señalar que surge el problema ya que mis archivos de medios estáticos están de hecho ubicados en un subdominio de medios separado, negando así el uso de caminos relativos. ¡Gracias!


36
2018-06-21 13:25


origen


Respuestas:


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

media/
    images/
    css/
    js/

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

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

Si no está preparado para cambiar la estructura de su carpeta multimedia para acomodar rutas de archivos relativas, puede que no tenga otra alternativa que sobrescribir las declaraciones css desde la plantilla, utilizando un archivo css secundario 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.


45
2018-06-21 13:48



Lo siento, no te gustará la respuesta.

He tenido el mismo problema:

No hay una manera fácil de hacerlo con archivos CSS servidos de forma estática.

Lo que hago:

  • depurar el servidor, trabajar localmente, los medios servidos localmente
  • servidor de producción está alojado en algún lugar comercial w / media en Amazon S3
  • El archivo settings.py establece automáticamente MEDIA_URL (DEPURACIÓN, etc.) a través de la verificación de nombre de host (para diferenciar entre producción y local / home / depuración)
  • Todos los archivos HTML tienen enlaces CSS con {{MEDIA_URL}} (+ RequestContext contextos para las vistas)
  • Me gustan los nombres de ruta absolutos, por lo que un script "update_s3": (1) altera cada archivo CSS es temporalmente para corregir 'url ("/ media' to 'url (" s3.mydomain.com/media' y (2) actualiza / carga mi directorio / multimedia a Amazon S3

Luego voy a producción y hago una actualización svn y toco el archivo WSGI y valido


6
2018-06-24 01:51



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


3
2018-06-21 13:50



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


0
2018-06-21 14:08