【问题标题】:Django Pipeline compiler not workingDjango Pipeline 编译器不工作
【发布时间】:2014-09-21 21:41:10
【问题描述】:

我正在尝试让 django-pipeline 在 Windows 上本地工作。当我运行 collectstatic 或 runserver 并转到该站点时,我收到以下错误:

NotADirectoryError at /
[WinError 267] The directory name is invalid

在模板中调用{% compressed_css 'main' %} 时会发生这种情况。

查看回溯,它似乎发生在 pipeline\compilers\__init__.py 的这一行:return list(executor.map(_compile, paths)),带有本地变量:

futures         <module 'concurrent.futures' from 'C:\\Python34\\Lib\\concurrent\\futures\\__init__.py'>
force           False
_compile        <function Compiler.compile.<locals>._compile at 0x0387A858>
paths           ['sass/main.sass']
multiprocessing <module 'multiprocessing' from 'C:\\Python34\\Lib\\multiprocessing\\__init__.py'>
executor        <concurrent.futures.thread.ThreadPoolExecutor object at 0x0387B970>
self            <pipeline.compilers.Compiler object at 0x0387B870>

settings.py 的相关块:

STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'

STATICFILES_DIRS = (
    (os.path.join(BASE_DIR, 'static/common')),
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)


# Pipeline
PIPELINE_SASS_BINARY = 'sass'
PIPELINE_YUGLIFY_BINARY = 'yuglify'

PIPELINE_COMPILERS = (
    'pipeline.compilers.sass.SASSCompiler',
)

PIPELINE_CSS = {
    'main': {
        'source_filenames': (
            'sass/main.sass',
        ),
        'output_filename': 'css/main.css'
    }
}

sass 和 yuglify 都从命令行工作。

相关文件系统结构:

myproject/
    ...
    settings.py
static/
    common/
        sass/
            main.sass

如果我取出 PIPELINE_COMPILERS = (...) 并仅使用它来缩小常规 CSS 文件,它就可以完美运行。

【问题讨论】:

  • 对此有什么解决方案吗?我仍然遇到同样的错误:/
  • 我在 IRC 上问过,没有人能弄清楚。我的“解决方案”是使用 linux。

标签: python django django-pipeline


【解决方案1】:

我有同样的错误。

它来自压缩器:当 DEBUG = True 时,django-pipeline 不会压缩你的文件,但它仍然会尝试编译它们。因此,如果您有任何需要压缩的文件,您必须为 Windows 设置路径(默认路径为 linux)。否则,您也可以将编译器仅用于生产并使用浏览器编译(我选择 LESS)。

在你的情况下,你需要设置 PIPELINE_SASS_BINARY

【讨论】:

    【解决方案2】:

    我不熟悉 django 管道,但我猜这是在 Windows 环境中使用 Unix 风格的路径引起的。例如。 sass/main.sass 和 css/main.css 应该写成'sass\\main.sass''css\\main.css'

    【讨论】:

    • 您会这么认为,但我尝试使用 os.path.join() 并使用转义的反斜杠,但到目前为止没有运气。我也尝试了 LESS 编译器并遇到了同样的问题。但是 yuglify 工作得很好。
    • 那太糟糕了。使用完整的绝对路径怎么样?
    • 没想到它们,本地变量将其转换为完整路径。该程序甚至可以正确运行,如果我运行 sass 或 lessc 或任何具有相同参数的 python 给它,它在命令行中运行良好,在交互式 shell 中运行良好。这很令人困惑。
    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多