2011-02-01 26 views
13

Django kullanıcısının diğer kullanıcıları gibi ben de statik dosyalar sunarım. Temel olarak into the core'u entegre edecek olan django 1.3'e hazır olmak için django-staticfiles'u kullanmayı tercih ettim.Django: statik dosyalarda medya referansı yapan css (django dev/1.3/statik dosyalar)

Sorum şu ki oldukça basit - bu, birden çok medya kaynağını bir araya getirip django şablonlarında tekdüze bir şekilde başvurmak için harika çalışıyor. Ancak, ben sık sık şöyle Css içinde resim arka kullanın:

#itemname { background-image: url('/path/to/image.png'); } 

Sorum basit - Ben mutlak adları kullanmak, ben sert kod onlara var. Göreli adlar kullanırsam, "alt dizine" geçiş yapmak, bu öğeler için kaynak konumunun üstesinden gelir ve yüklenemez.

Peki, bu çözümü CSS'ye nasıl genişletirim? Çözelti kaçınmak gerekir Bahsedilen:

  • html CSS gömülmesi. Kişisel olarak bundan uzak duruyorum.
  • Sabit kodlu URL'leri kullanma. Bu çok işe yaramıyor çünkü yerel kurulumumda genellikle 'localhost/project' (apache ile test yapmak için) kullanıyorum (mod_wsgi). Bu yüzden dağıtım için project.com'u kullanıyorum.

Fikirler?

cevap

19

Göreli yollarla ilgili sorun yaşadığınızı söylediniz, ama tam olarak ne demek istediğini anlamıyorum.

Aynı soruna rastladım ve çözmek için göreli yollar kullandım. Akılda tutulması gereken tek şey, görüntüleri dağıtırken (açıkça) CSS dosyalarına göre aynı yolda kalması gerektiğidir.

Benim özetle kurulumu: Hala Django 1.2 ile django-Statik Dosyalar kullanıyorum

Not, ancak Django 1.3 için benzer çalışmalıdır Sonra

STATIC_URL = "/site_media/static/" 
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static") 
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, "static_media"), 
) 

Hizmet ettiğim {{ STATIC_URL }}css/style.css'dan CSS, görüntülere ../images/logo.png referansı vermektedir.

ve benim proje şöyle görünür:

project_dir 
    ... 
    stuff 
    static_media 
    ... 
    css 
    images 

Herhangi bir sorunuz olursa bize bildirin, ben açıklamak gerekir. Tamam

+0

Emin değilim, şimdi yanıtladınız - css dosyasıyla ilgili css 'background-image 'URL'leri veya sayfanın sunulduğu url'ler nelerdir?Eskiyse sıralıyorum, çünkü tam olarak neyi özetlediğini kullanabilirim. –

+0

Sadece test ettim - göreceli olarak çalışıyor css. Bundan memnun olurum. Bir kene var! –

+0

@John, PROJECT_ROOT'un sizin tarafınızdan da tanımlandığı veya Django tarafından mevcut Proje kökünüz olarak (manage.py'ninizde olduğu yer) otomatik olarak tanımlandığı. PROJECT_ROOT'u kendiniz tanımladığınızda, geliştirme ortamında mı yoksa üretim ortamında mı (dizin yapısı olarak) farklı – David

1

,

orada @ John'un çözümde yanlış bir şeydir ama sonra bana çalıştı vermedi CSS Bu kodu koyarsanız bilmiyorum

{% load static %} 
{% get_static_prefix as STATIC_PREFIX %} 

ve

<link rel="stylesheet" href="{{ STATIC_PREFIX }}css/main.css"> 

Umut eder!

+0

Bu, tüm stillerinizin bir şablon olarak ayrıştırılması gerektiği anlamına gelir ... onları önbelleğe almayı düşünün! – Stefano