2012-05-02 16 views
5

nie jestem pewien, że robię to dobrze, ale tutaj jest problem:django-kompresor: Korzystanie lessc w trybie debugowania

  • Używam django-compressor z lessc preprocesora
  • niektóre z Pliki LESS mają względne adresy URL obrazu. Niektóre z nich są moje, niektóre są biblioteki 3rd party (np Bootstrap)
  • Kiedy COMPRESS_ENABLED jest True, wszystko działa poprawnie
  • Kiedy COMPRESS_ENABLED jest False The CssAbsoluteFilter nie działa już, co oznacza, że ​​wszystkie względne adresy URL obrazu są przechowywane względne, a zatem są łamane (ponieważ nie są one względne z katalogu CACHE)

mogłem wymyślić „sprytnego” struktury katalogów gdzie ścieżki względne rozwiązać do tego samego pliku, czy pochodzą one z CACHE katalogu lub z katalogu plików LESS, ale wydaje się, że jest to kruche rozwiązanie.

Jak zwykle pracujesz, jeśli chodzi o MNIEJ + django-compressor?

+0

Wydaje mi się, że jest to błąd w django_compressor - prekompilatory zawsze są wywoływane, ale filtry występują tylko podczas kompresji. – Greg

+0

Tak, właśnie to się dzieje - więc nie błąd, ponieważ działa tak jak udokumentowano. Ale ponieważ nie jest to * pożądane *, IMHO, zastanawiam się, czy czegoś brakuje lub po prostu źle. – Ludovic

+0

Wydaje się, że jest to przypadek, który nie został uznany przez twórców django_compressor ... to zdecydowanie problem, jeśli nie błąd. Czy próbowałeś napisać skrypt prekompilatora, aby przekonwertować swoje adresy URL? – Greg

Odpowiedz

7

Można użyć prostego rozwiązania:

COMPRESS_PRECOMPILERS = (
    ('text/less', 'path.to.precompilers.LessFilter'), 
) 

precompilers.py:

from compressor.filters.base import CompilerFilter 
from compressor.filters.css_default import CssAbsoluteFilter 

class LessFilter(CompilerFilter): 
    def __init__(self, content, attrs, **kwargs): 
     super(LessFilter, self).__init__(content, command='lessc {infile} {outfile}', **kwargs) 

    def input(self, **kwargs): 
     content = super(LessFilter, self).input(**kwargs) 
     return CssAbsoluteFilter(content).input(**kwargs) 

Zwróć uwagę ten działa zarówno COMPRESS_ENABLED = True i False.

0

W przypadku używasz Django libsass kod filtra wygląda następująco:

from compressor.filters.css_default import CssAbsoluteFilter 
from django_libsass import SassCompiler 


class PatchedSCSSCompiler(SassCompiler): 
    def input(self, **kwargs): 
     content = super(PatchedSCSSCompiler, self).input(**kwargs) 
     return CssAbsoluteFilter(content).input(**kwargs) 

A następnie w pliku ustawień:

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', 'path.to.PatchedSCSSCompiler'), 
) 
1

ten został ustalony w Django 1.6 sprężarki . Z changelog:

Apply CssAbsoluteFilter to precompiled css even when compression is disabled 

czyli filtr absolutny jest prowadzony na swoich mniejszych plików nawet z DEBUG = True.

Powiązane problemy