urls tutorial page files examples bootstrap django django-templates

tutorial - templates django



Django Media URLs en archivos CSS (4)

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 la variable de contexto MEDIA_URL .

¿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, lo que niega el uso de rutas relativas. ¡Gracias!


¿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.


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


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}} (contextos + RequestContext para las vistas)
  • Me gustan los nombres de ruta absolutos, por lo que un script "update_s3": (1) altera cada archivo css temporalmente para reparar ''url ("/ media'' to ''url (" s3.mydomain.com/media'' y (2) updates / 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


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