2014-11-06 42 views
5

我們使用django-compressordjango.contrib.staticfiles應用程序,我們在運行django開發服務器和處理SCSS時遇到問題:錯誤的SCSS文件獲取編譯。 STATIC_ROOT/app中的版本正在被發現,而不是app/static中的版本。這樣做使編輯的CSS中不反映app/static中SCSS的編輯。django-compressor在STATIC_ROOT/app中編譯SCSS文件而不是app/static

刪除STATIC_ROOT/app中的所有內容解決了該問題,但如果由於某種原因執行collectstatic,則會引起很多混淆。

有沒有辦法確保應用程序/靜態文件被編譯而不是現有的STATIC_ROOT /應用程序文件?

我們使用Django的壓縮機1.4和Django 1.6及以下設置在Django配置文件中使用:

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder", 
    "django.contrib.staticfiles.finders.AppDirectoriesFinder", 
    'compressor.finders.CompressorFinder', 
) 
COMPRESS_PRECOMPILERS = (
    ("text/x-scss", 'sass --scss'), 
) 
STATICFILES_DIRS = [] #default 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') 
+0

你可以分享你的'STATICFILES_DIRS'和'STATIC_ROOT'設置嗎? – richardcornish 2014-11-07 15:53:11

+0

剛用'STATICFILES_DIRS'(這只是默認值)和'STATIC_ROOT'編輯。 – mstringer 2014-11-07 20:31:31

+0

究竟是什麼'app'?它是一個Django應用程序,一個Django項目或其他東西? 'app/static'在哪裏?它被添加到'INSTALLED_APPS'? – richardcornish 2014-11-07 22:03:56

回答

1

sass --scss COMAND在COMPRESS_PRECOMPILERS沒有明確的目標目錄。因此默認使用,其中seems to be stdin and stdout

現在壓縮機文檔並不清楚用什麼方法使用stdout;但是,從例子中,似乎這些文件將在COMPRESS_ROOT結束(默認爲STATIC_ROOT/CACHE而你的情況是root/base/static/CACHE/

我個人喜歡的是明確說明的輸入/輸出目錄(留在不同的環境中恆) 。下面是一個例子(使用pyScss編譯器,但這個想法是一樣的):

scss_cmd = '{python} -mscss -A "{image_output_path}" -a "{static_url}" ' \ 
    '-S "{static_root}" -o "{{outfile}}" "{{infile}}"'.format(
     python=sys.executable, 
     image_output_path=COMPRESS_ROOT, 
     static_url=STATIC_URL, 
     static_root=os.path.join(PROJECT_ROOT), 
    ) 

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', scss_cmd), 
) 

(抱歉,如果挖掘早已被人遺忘的問題)

0

使用django-libsass

COMPRESS_PRECOMPILERS = (
    ('text/x-sass', 'django_libsass.SassCompiler'), 
    ('text/x-scss', 'django_libsass.SassCompiler'), 
) 

https://github.com/torchbox/django-libsass

確保正確配置STATIC_URLSTATIC_ROOT,如中所述。

例如:

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"), 
) 
STATIC_ROOT = os.path.join(BASE_DIR, 'static_collected') 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'compressor.finders.CompressorFinder', 
) 

Compressor將照顧休息,適當地取決於DEBUG變量。