2013-01-14 13 views
8
'un Kullanılması

Kafamı django-kompresör kullanımı etrafında almakta çok zorlanıyorum. İşte Django Kompresörlü Statik Dosyaların ve Varlıkların Ayrılması Kolektorik

Ben başarmak çalışılıyor budur: Statik Dosyalarının

Ayırma & Varlıkları (AZ, CoffeeScript)

Bir varlıklar dizine benim AZ CSS ve CoffeeScript dosyalarını ayırmak istiyorum

eg

app 
    └── assets 
     ├── coffee 
     │ └── script.coffee 
     └── less 
      └── style.less 

böyle benim statik dizindeki görüntüleri gibi statik varlıklarını bırakarak

örn

app 
    └── static 
     ├── hello.txt 
     └── photo.jpg 

Bunu yapmak için, benim STATICFILES_DIRS (as beklenen çalışır) django-kompresör dosyaları bulmak için izin değişken varlıkları yolunu ekledik. Bu doğru yaklaşım mı? Ben django-kompresör adanmış bağımsız bir yük yolu bulmaya çalışıyordum ama bu varlıkların statik olarak sunulmasını istemediğim için hiç şansım olmadı. üretime dağıtma için Üretim Dağıtım

için Dosyalarının

Koleksiyon, o zaman derlenmiş CSS gibi (böyle devam örn görüntüler ve) diğer my app/statik dizinde medya ile birlikte & JS dosyaları toplanacak olur Bir uygulama/statik-prod dizini. Ancak bu çok iyi sonuç vermez, çünkü varlıklar ayrıca collectstatic komutunu kullanırken toplanır.

örn. ./manage.py compress komutunu kullanarak

(django-cpython)[email protected]:~/django_learning$ ./manage.py collectstatic --noinput 
Copying '/home/fots/django_learning/app/assets/less/style.less' 
Copying '/home/fots/django_learning/app/assets/less/import.less' 
Copying '/home/fots/django_learning/app/assets/coffee/script.coffee' 
Copying '/home/fots/django_learning/app/static/photo.jpg' 
Copying '/home/fots/django_learning/app/static/hello.txt' 

5 static files copied. 

sadece bu örnekte benim derlenmiş dosyalar değil fotoğrafı.jpg veya hello.txt darası alır.

Bunu buldum tek yol collectstatic

ör --ignore bayrağını kullanıyor

(django-cpython)[email protected]:~/django_learning$ ./manage.py collectstatic --noinput --ignore=less --ignore=coffee 
Copying '/home/fots/django_learning/app/static/photo.jpg' 
Copying '/home/fots/django_learning/app/static/hello.txt' 

2 static files copied. 

Ben de COMPRESS_ROOT ve COMPRESS_URL yapılandırma değişkenleri ile etrafında haberci ettik ama bunlar sadece daha fazla probleme yol açabilir. COMPRESS_ROOT değiştirme collectstatic sorunu giderir, ancak şimdi sıkıştır komutunu kullanırken oluşturulan dosyalar statik dosyalara farklı bir konumda olur.

Bu çözümler pek şık görünmüyor. Bunu yapmanın daha iyi bir yolu var mı? Bir şeyleri özlüyorum gibi hissediyorum. herhangi bir yardım :)

cevap

5

için şimdiden

teşekkürler ben bugüne kadar bulunmuş en iyi çözümü sağlamak ama daha iyi alternatifler önermek için çekinmeyin düşündüm.

İhtiyacımı engelleyen en büyük sorun, django-kompresörün bulucu ve çıktı için aynı yolu kullanmasıdır. Bulduğum en iyi çözüm aşağıdaki gibidir.Biz ilk ben

Basitçe STATICFILES_FINDERS bu bulucu eklemek bu yeni bulucu kullanarak COMPRESS_SOURCE_ROOT

from compressor.storage import CompressorFileStorage 
from compressor.finders import CompressorFinder 
from compressor.conf import settings 


class CompressorFileAltStorage(CompressorFileStorage): 
    """ 
    This alternative django-compressor storage class is utilised 
    specifically for CompressorAltFinder which allows an independent 
    find path. 

    The default for ``location`` is ``COMPRESS_SOURCE_ROOT``. 
    """ 
    def __init__(self, location=None, base_url=None, *args, **kwargs): 
     if location is None: 
      location = settings.COMPRESS_SOURCE_ROOT 
     # The base_url is not used by the Finder class so it's irrelevant 
     base_url = None 
     super(CompressorFileAltStorage, self).__init__(location, base_url, 
                 *args, **kwargs) 

class CompressorAltFinder(CompressorFinder): 
    """ 
    A staticfiles finder that looks in COMPRESS_SOURCE_ROOT 
    for compressed files, to be used during development 
    with staticfiles development file server or during 
    deployment. 
    """ 
    storage = CompressorFileAltStorage 

diyoruz yeni bir ayar dayalı bir özel bulucu oluşturmak özel bir bulucu

oluşturma

her zamanki 'compressor.finders.CompressorFinder'

'ye ek olarak ayarı

örn. Şimdi

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
# 'django.contrib.staticfiles.finders.DefaultStorageFinder', 
    'mycomp.CompressorAltFinder', 
    'compressor.finders.CompressorFinder', 
) 

Ve

örneğin COMPRESS_SOURCE_ROOT adlı yeni bir ayar kurmak

COMPRESS_SOURCE_ROOT = os.path.join(APP_DIR, 'assets') 

Ben de kurdum benim STATIC_ROOT çok

STATIC_ROOT = os.path.join(APP_DIR, 'static-prod') 

Testi Özellikle şablon etiketleri

ile benim AZ kaynak kod derleme

(django-cpython)[email protected]:~/django_learning$ tree app/assets 
app/assets 
├── coffee 
│ └── script.coffee 
└── less 
    ├── import.less 
    └── style.less 

test Kalkınma

yılında Çözüm

{% compress css %} 
    <link rel="stylesheet" type="text/less" 
     href="{{ STATIC_URL }}less/style.less" /> 
{% endcompress %} 

Bu, dosyaları değiştirdiğimde öğe dizininden başarıyla okundu ve güncelleştirildi.

çıkış statik prod dizinde yerleştirilir:

(django-cpython)[email protected]:~/django_learning$ tree app/static-prod/ 
app/static-prod/ 
└── CACHE 
    ├── css 
    │ ├── style.5abda32cfef7.css 
    │ └── style.6ca1a3d99280.css 
    └── js 
     └── script.8cb4f955df19.js 

3 directories, 3 files 

Test, burada benim statik dizin göründüğünü Başvuru için

Üretim

için Çözüm var Yani
(django-cpython)[email protected]:~/django_learning$ tree app/static 
app/static 
├── hello.txt 
└── photo.jpg 

0 directories, 2 files 

gibi işte başlıyoruz

(django-cpython)[email protected]:~/django_learning$ rm -rf app/static-prod 
(django-cpython)[email protected]:~/django_learning$ ./manage.py collectstatic --noinput 
Copying '/home/fots/django_learning/app/static/photo.jpg' 
Copying '/home/fots/django_learning/app/static/hello.txt' 

2 static files copied. 
(django-cpython)[email protected]:~/django_learning$ ./manage.py compress 
Found 'compress' tags in: 
     /home/fots/django_learning/app/templates/layout.html 
Compressing... done 
Compressed 2 block(s) from 1 template(s). 
(django-cpython)[email protected]:~/django_learning$ tree app/static-prod 
app/static-prod 
├── CACHE 
│ ├── css 
│ │ └── 5abda32cfef7.css 
│ ├── js 
│ │ └── 3b9d1c08d2c5.js 
│ └── manifest.json 
├── hello.txt 
└── photo.jpg 

3 directories, 5 files 

Sonra şöyle web sunucusu ran ve site bu Orda birisi :)

yardımcı

./manage.py runserver 0.0.0.0:8000 --insecure 

Umut operasyonel olduğunu doğruladı

İlgili konular