Pregunta

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

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

¿Cómo lograrías esto 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 de medios o durante el trabajo fuera de línea y servirlos directamente como una vista 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 tener en cuenta que el problema surge ya que mis archivos de medios estáticos están ubicados en un subdominio de medios separado, , negando así el uso de rutas relativas. ¡Lo tengo, gracias!

¿Fue útil?

Solución

¿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 archivo relativas para imágenes, por ejemplo:

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

Si no está preparado para cambiar la estructura de su carpeta de medios para acomodar las rutas de archivos relativas, es posible que no tenga otra alternativa que sobrescribir las declaraciones CSS desde dentro de 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.

Otros consejos

Lo siento, no te gustará la respuesta.

Tengo el mismo problema:

No hay una manera fácil de hacer esto con archivos CSS con servicio estático.

Lo que hago:

  • servidor de depuración, trabajo local, medios servidos localmente
  • el servidor de producción está alojado en algún lugar comercial con medios en Amazon S3
  • el archivo settings.py configura automáticamente MEDIA_URL (DEBUG, etc.) a través de la verificación del nombre de host (para diferenciar la producción frente a local / home / debug)
  • Todos los archivos HTML tienen enlaces CSS con {{MEDIA_URL}} (+ RequestContext contextos para vistas)
  • Me gustan los nombres de ruta absolutos, así que " update_s3 " guión: (1) altera cada archivo CSS para solucionarlo temporalmente 'url (" / media' a 'url (" s3.mydomain.com/media' y (2) actualiza / carga mi directorio / media en Amazon S3

Luego voy a producción y hago una actualización de svn & amp; toca el archivo WSGI & amp; validar

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top