Python libsass sass.complie() не компилирует sass

У меня возникла проблема с компиляцией файлов SASS с помощью libsass. Я могу заставить его компилировать файлы SCSS просто отлично.

У меня есть приложение Flask, я установил libsass и использую привязку libsass sass. Он работает хорошо, но не хватает некоторых функций — он не может скомпилировать SASS, но может скомпилировать SCSS. Вот что я сделал:

В моем файле applicaiton.py у меня есть

from flask import Flask
import sass

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    sass.compile(dirname=('client/sass', 'client/css'), source_comments=True)
    app.run()

Мои два тестовых файла test_scss.scss, которые работают:

$font-stack:    Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}

И test_sass.sass:

$font-stack:    Helvetica, sans-serif
$primary-color: #333

body
  font: 100% $font-stack
  color: $primary-color

В документации сказано, что sass.complie может принимать код SASS, но я могу заставить его принимать только код SCSS. То есть, когда я запускаю свое приложение, только файл .scss компилируется в CSS. Структура каталогов моего приложения после запуска sass.compile:

  • client
    • css
      • app.css
      • test_scss.css
    • библиотека
    • sass
      • test_sass.sass
      • test_scss.scss
  • server
    • templates
    • приложение.py

Кто-то предложил мне просто переименовать файл SASS во что-то с расширением .scss. Как test_sass.scss:'

$font-stack:    Helvetica, sans-serif
$primary-color: #333

body
  font: 100% $font-stack
  color: $primary-color

Однако, когда я это делаю, я просто получаю следующую ошибку:

src/web-internal/server/applicaiton.py", line 8, in <module>
    sass.compile(dirname=('client/sass', 'client/css'), source_comments=True)
  File "/usr/local/lib/python3.4/site-packages/sass.py", line 516, in compile
    raise CompileError(v)
sass.CompileError: b"Error: top-level variable binding must be terminated by ';'\n        on line 2 of src/web-internal/server/../client/sass/test_sass.scss\n>> $primary-color: #333\n   ^\n"

Я хотел бы использовать SASS и предпочел бы не соглашаться на SCSS. У кого-нибудь есть предложения? Я чувствую, что в документации по sass есть что-то, чего я не понимаю.


person Mike    schedule 28.07.2015    source источник
comment
Можете ли вы показать структуру папок вашего приложения?   -  person doru    schedule 28.07.2015
comment
Ваши папки sass, css должны находиться в папке с именем static. См. здесь дополнительную информацию.   -  person doru    schedule 28.07.2015
comment
Спасибо @doru, но вы думаете, что это проблема, хотя мое приложение Flask запускается с использованием app = Flask(__name__,static_url_path="",static_folder=CLIENT_FOLDER), где CLIENT_FOLDER — это папка client (CLIENT_FOLDER=os.path.join(os.path.realpath(os.path.dirname(__file__)),"..","client"))   -  person Mike    schedule 28.07.2015
comment
Люди в основном будут гадать, если вы не поделитесь минимальным, полным и проверяемым примером.   -  person dirn    schedule 28.07.2015
comment
Спасибо @dirn, есть предложения, что удалить, добавить или проверить в этом примере?   -  person Mike    schedule 28.07.2015
comment
Вы предоставляете исключение, но не отслеживаете. Вы ссылаетесь на файл, содержащий строку кода, но не делитесь этим файлом. Это хорошие места для начала.   -  person dirn    schedule 29.07.2015
comment
Спасибо @dirn, я немного скорректировал вопрос в ответ на ваши комментарии.   -  person Mike    schedule 29.07.2015


Ответы (1)


У меня никогда не получалось работать с sass.compile, но я нашел обходной путь.

...

if __name__ == '__main__':
    # Start sassc with --watch
    sass_cmd = subprocess.Popen(['sass', '--watch', 'client/sass' + ':' + 'client/css'])
    ... 
person Mike    schedule 03.08.2015