2009-06-21 22 views
36

, şu işlemleri yapmanız yaygındır dosyaları?Django medya URL'ler django şablonlarında

.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? */ 
} 

Ya medya alt alanın veya çevrimdışı çalışma sırasında dosyalarımı hizmet etmek ve bir Django statik görünüm olarak doğrudan onlara hizmet yeteneği gerekir. Ancak, CSS dosyaları, şablon olarak işlenmedikleri ve MEDIA_URL içerik değişkenini kullanamadıkları için bir sorundur.

Çözüm nedir?

Düzenleme: Ben sorun benim statik medya dosyalarını ayrı bir medya alt etki üzerinde bulunan aslında olduğundan, böylece göreli yollar kullanımını ortadan doğar unutmamalıdır. Anladım, teşekkürler!

cevap

45

Css dosyanız nerede görüntülenir? örneğin

media/ 
    images/ 
    css/ 
    js/ 

(veya benzeri) görüntüler için göreli dosya yolları için izin verir,:

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

sen hazırlıklı değilseniz Bu genellikle yaygın medya yapısı gibi bir sorun değildir ikincil bir css dosyasını kullanarak, şablondan içinden css bildirimleri üzerine yazmak ama hiçbir alternatifi olabilir, göreceli dosya yolları karşılamak için medya klasör yapısını değiştirmek çevrimdışı: elbette

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

İlk seçenek çok daha düzenli.

3

CSS dosyalarınızdaki göreli yolları (resim dosyaları için) sizin için uygun bir seçenek değil mi?

0

Bir dosyada şablon yönergeleri kullanmak istiyorsanız, neden bir şablon aracılığıyla sunulmuyor?

6

Üzgünüz, cevabı beğenmeyiniz.

Aynı sorun var:

statik sunulan CSS dosyaları ile bunu kolay bir yolu yoktur.

yapmam gerekenler:

  • ayıklama sunucusu, yerel olarak çalışmak, medya yerel hizmet
  • üretim sunucusu Amazon S3 yerde ticari w/medya dışarı barındırıldığı
  • settings.py dosyası otomatik MEDIA_URL (setleri hostname çekle DEBUG vs.) (tüm görünümler için {{MEDIA_URL}} (+ RequestContext bağlamlarda)
  • ile css bağlantıları
  • HTML dosyaları yerel/ev/debug vs üretimi) ayırt etmek
  • Ben mutlak yol isimleri ister, yani bir "update_s3" komut dosyası: (1) değiştirir her css dosyası geçici s3.mydomain '"url (' için /medya" url (' tamir etmektir.com/medya' ve (2) güncellemeleri/yükler Amazon S3 benim/medya rehberi
Sonra üretime gidip WSGI dosyasını bir svn güncelleştirme & validate & dokunuş yapmak