django-pipeline 完全不起作用

4 投票
2 回答
2184 浏览
提问于 2025-04-18 18:14

我为这个问题纠结了好几个小时,求求你们帮我解决这个问题,不然我就要崩溃了 =(

我在视图中所有的4个文件都出现了404错误,找不到任何编译后的文件。

我在虚拟环境中使用的是Python 3.4.0,Django版本是1.7 RC3。

顺便提一下:

python manage.py collectstatic

这个过程是把所有的文件从assets复制到assets_compressed,并且在那里面添加了管理员样式。但是最后出现了一个错误:

ValueError: The joined path (/) is located outside of the base path component (/home/val/Programming/Django/nedviga/nedviga/assets)

设置:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'pipeline',
)

...

STATIC_URL = '/assets/'

STATIC_ROOT = os.path.join(BASE_DIR, 'assets_compressed')

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'assets'),
)

...

PIPELINE_ENABLED = True

STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'

PIPELINE_CSS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'

PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'

PIPELINE_COMPILERS = (
    'pipeline.compilers.less.LessCompiler'
)

PIPELINE_CSS = {
    'libs': {
        'source_filenames': (
            'libs/bootstrap/css/bootstrap.min.css'
        ),
        'output_filename': 'css/libs.css'
    },
    'site': {
        'source_filenames': (
            'main.less'
        ),
        'output_filename': 'css/main.css'
    }
}

PIPELINE_JS = {
    'libs': {
        'source_filenames': (
            'libs/jquery/jquery-2.1.1.min.js'
            'libs/bootstrap/js/bootstrap.min.js'
        ),
        'output_filename': 'js/libs.js'
    },
    'site': {
        'source_filenames': (
            'main.js'
        ),
        'output_filename': 'js/main.js'
    }
}

目录结构:

project_name

    assets
        libs
            ...
        main.js
        main.less

    assets_compressed
        *empty*

    project_name
    manage.py

视图:

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title>AAARGH</title>

    {% load compressed %}
    {% compressed_css 'libs' %}
    {% compressed_css 'site' %}
</head>

<body>

    {% compressed_js 'libs' %}
    {% compressed_js 'site' %}
</body>

</html>

2 个回答

0

我不知道这个信息现在是否还有用,但你只是忘了把 'pipeline.finders.PipelineFinder' 加到你的 STATICFILES_FINDERS 里:

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

你需要在每个源文件名后面加一个逗号。即使只有一个源文件名也要加。

比如说:

'source_filenames': ( 'main.less' , ),

而不是这样:

'source_filenames': ( 'main.less' ),

撰写回答