【问题标题】:Django + Pipeline to compress css: 404 for the output_filename css fileDjango + Pipeline 压缩 css:404 用于 output_filename css 文件
【发布时间】:2012-04-04 14:07:52
【问题描述】:

压缩css文件的管道配置如下:

PIPELINE_CSS = {
                'colors': {
                          'source_filenames': (
                                               '/static/css/colors/colors.css',
                                               '/static/css/colors/layout.css'
                                               ),
                          'output_filename': '/static/css/Colors.css',
                    },
                }

但是当客户端试图获取时

/static/css/Colors.css 与

{% load compressed %}    
{% compressed_css 'colors' %} 

它返回 404,未找到。 如果我运行collectstatic,则不会在 STATIC_ROOT 中生成文件(如 /static/css/Colors.css)。

我已经从我的 Ubuntu Lucid 的 Synaptic Repository 安装了 YUI Compressor。

编辑1: 其他的settings.py:

PIPELINE_STORAGE = 'pipeline.storage.PipelineFinderStorage'

STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'

管道=真

在中间件类中:

'django.middleware.gzip.GZipMiddleware',

'pipeline.middleware.MinifyHTMLMiddleware',

STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', # 'django.contrib.staticfiles.finders.DefaultStorageFinder', )

STATICFILES_DIRS = ( "/home/my/eclipse/myproject/static/", )

STATIC_URL = '/static/'

STATIC_ROOT = '/home/my/eclipse/myproject/static2/'

【问题讨论】:

  • 你需要指定文件的相对路径,不是吗?
  • @neoasceetic 我在源文件夹中有静态文件。所以我认为如果我使用相对路径,则找不到文件。
  • 为什么会这样?与媒体文件不同,静态文件必须按照定义位于源目录中
  • 因为包含python代码的源文件夹是私有的,但是js和css文件是公开的,所以我必须区分这个事实。
  • 为什么不复制/链接这些文件?

标签: css django compression settings http-status-code-404


【解决方案1】:

您需要使用源文件的相对路径,因为pipeline 使用staticfiles 应用程序来查找此文件。

阅读更多关于staticfiles management in Django

【讨论】:

  • 这样相对路径从哪里开始?从源文件夹?从项目根文件夹?如果我的项目包含 /myproject/static /myproject/src myproject/media,相对路径从 /myproject 文件夹开始?还是?
  • 路径从static 文件夹开始。因为您的项目中可以有许多应用程序,并且每个应用程序中都可以有静态文件。所以,如果你有/myproject/static/css/main.css,相对路径是css/main.css
  • 现在我使用相对路径(例如 'css/colors/colors.css' ),但是 collectstatic 不会在 STATIC_ROOT 文件夹中生成压缩文件
  • 您是否在设置中指定STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'
  • 没有,但是刚才我已经添加了这个设置,但是结果很糟糕。在 STATIC_ROOT 中没有生成文件。但是现在我将编辑问题以更好地指定我的 settings.py
【解决方案2】:

运行 collectstatic 时的最后一行是什么?

我注意到它写入 /tmp 而不是 STATIC_ROOT 。

删除这两行似乎可以解决问题:

PIPELINE_STORAGE = 'pipeline.storage.PipelineFinderStorage'
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage' 

(顺便说一句,语法已更改为 {% load pipeline %} {% stylesheet 'colors' %} )

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多