URL multimediali di Django nei file CSS
-
06-07-2019 - |
Domanda
Nei template di django, è comune fare quanto segue:
<img src="{{ MEDIA_URL }}/img/someImage.jpg">
Come lo faresti in un file CSS che non è servito come modello?
.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? */
}
Ho bisogno della possibilità di servire i miei file dal sottodominio multimediale o durante il lavoro offline e servirli direttamente come una vista statica django. Ma i file CSS sono un problema poiché non vengono elaborati come modelli e non posso usare la variabile di contesto MEDIA_URL
.
Qual è la soluzione?
Modifica: Dovrei notare che il problema sorge poiché i miei file multimediali statici si trovano in realtà su un sottodominio multimediale separato, , negando così l'uso di percorsi relativi. Capito, grazie!
Soluzione
Da dove viene servito il tuo file css? Questo di solito non è un problema come una struttura multimediale comune come:
media/
images/
css/
js/
(o simile) consente percorsi relativi di file per immagini, ad esempio:
background: url('../images/foo.png');
Se non si è pronti a modificare la struttura della cartella multimediale per adattarsi ai percorsi dei file relativi, è possibile che non si abbia altra alternativa che sovrascrivere le dichiarazioni CSS all'interno del modello, utilizzando un file CSS secondario quando si è offline:
{% if DEBUG %}
<link rel="stylesheet" href="{{ MEDIA_URL }}css/offline-mode.css" />
{% endif %}
Naturalmente la prima opzione è molto più ordinata.
Altri suggerimenti
Scusa, non ti piacerà la risposta.
Ho lo stesso problema:
Non esiste un modo semplice per farlo con file CSS forniti staticamente.
Cosa faccio:
- server di debug, lavoro locale, media servito localmente
- il server di produzione è ospitato da qualche parte con supporti multimediali su Amazon S3
- Il file settings.py imposta automaticamente MEDIA_URL (DEBUG, ecc.) tramite il controllo del nome host (per differenziare la produzione rispetto a local / home / debug)
- Tutti i file HTML hanno collegamenti CSS con {{MEDIA_URL}} (+ RequestContext contesti per le visualizzazioni)
- Mi piacciono i nomi di percorso assoluti, quindi un " update_s3 " script: (1) modifica ogni file CSS che è temporaneamente da correggere "url (" / media" a "url (" s3.mydomain.com/media" e (2) aggiorna / carica la mia directory / media su Amazon S3
Vado quindi in produzione e faccio un aggiornamento svn & amp; tocca il file WSGI & amp; convalidare
L'uso dei percorsi relativi (per i file di immagine) nei file CSS non è un'opzione praticabile per te?
Se si desidera utilizzare le direttive del modello in un file, perché non viene pubblicato tramite un modello?