我们正在使用django-compressor
和django.contrib.staticfiles
应用,我们在运行django开发服务器和处理我们的SCSS时遇到了问题:错误的SCSS文件被编译。找到STATIC_ROOT/app
中的版本而不是app / static中的版本。这使得app/static
中对SCSS的编辑不会反映在已编译的CSS中。
删除STATIC_ROOT/app
中的所有内容可以解决问题,但如果因某种原因执行了collectstatic
,则会造成很多混淆。
有没有办法确保编译app / static文件而不是任何现有的STATIC_ROOT / app文件?
我们在django 1.6中使用django-compressor 1.4,并在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 :(得分:1)
sass --scss
中的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),
)
(对不起,如果挖掘长期遗忘的问题)
答案 1 :(得分:0)
使用django-libsass
:
COMPRESS_PRECOMPILERS = (
('text/x-sass', 'django_libsass.SassCompiler'),
('text/x-scss', 'django_libsass.SassCompiler'),
)
https://github.com/torchbox/django-libsass
确保按照https://docs.djangoproject.com/en/1.8/howto/static-files/中的说明正确配置STATIC_URL
和STATIC_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',
)
压缩器将根据DEBUG
变量适当地处理其余部分。