【问题标题】:Python libsass sass.complie() not compiling sassPython libsass sass.compiler() 不编译 sass
【发布时间】:2015-07-28 14:43:14
【问题描述】:

我在让 libsass 编译 SASS 文件时遇到问题。我可以让它编译 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运行后的目录结构是:

  • 客户端
    • CSS
      • app.css
      • test_scss.css
    • 萨斯
      • test_sass.sass
      • test_scss.scss
  • 服务器
    • 模板
    • application.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 documentation 中有一些我误解的东西。

【问题讨论】:

  • 你能展示一下你的应用的文件夹结构吗?
  • 您的sasscss 文件夹应位于static 命名文件夹中。请参阅here 一些信息。
  • 谢谢@doru 但是,即使我的Flask 应用程序是使用app = Flask(__name__,static_url_path="",static_folder=CLIENT_FOLDER) 启动的,其中CLIENT_FOLDERclient 文件夹(CLIENT_FOLDER=os.path.join(os.path.realpath(os.path.dirname(__file__)),"..","client")),你认为这是问题所在
  • 除非你分享Minimum, Complete, and Verifiable Example,否则人们大多会猜测。
  • 您提供了异常但没有回溯。您引用了包含一行代码的文件,但不共享该文件。这些是开始的好地方。

标签: python css flask sass libsass


【解决方案1】:

我从来没有使用 sass.compile 解决这个问题,但我找到了解决方法。

...

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

【讨论】:

    【解决方案2】:

    Python libsass 包的 compile() 方法支持 indented kwarg 来告诉编译器给定的输入是缩进 .sass 还是常规括号 .scss。

    如果您使用缩进的 .sass 作为输入,只需像这样使用它:

    indented_sass_string = """
    
    $font-stack:    Helvetica, sans-serif
    $primary-color: #333
    
    body
      font: 100% $font-stack
      color: $primary-color
    """
    
    css = sass.compile(string=indented_sass_string, indented=True)
    

    我认为如果您要传递整个目录,这将起作用。如果您尝试编译包含 .sass 和 .scss 文件的整个目录,我不确定会发生什么。

    查看文档:https://sass.github.io/libsass-python/sass.html#sass.compile

    【讨论】:

      【解决方案3】:

      如果你想编译任何文件,那么你可以这样做

      import sass
      sass.compile(dirname=("client/sass", "client/css"))
      

      libsass-python 文档。

      【讨论】:

        猜你喜欢
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        • 2016-10-27
        • 2017-03-16
        相关资源
        最近更新 更多