ValueError:使用<pipeline.storage.pipelinecachedstorage object =“”> </pipeline.storage.pipelinecachedstorage>找不到该文件

时间:2014-04-26 11:29:01

标签: python django

我正在尝试使用 Django 1.6.3 上的django pipeline编译SASS并压缩CSS文件,但在访问我的网站后出现以下错误:

  

ValueError:找不到&lt; pipeline.storage.PipelineCachedStorage对象位于0x0585DF50&gt;的文件'css / test2.css'。

我按照readthedocs.org上的指南配置了管道:我已将管道添加到INSTALLED_APPS,然后我定义了STATIC_URLSTATIC_ROOT

STATIC_URL = '/test/forum/skins/default/media/'
STATIC_ROOT = '/test/forum/skins/default/media/'

文件夹树:

  • 测试
    • 论坛
      • 外观
        • 默认
          • 媒体(静态文件)
            • css
            • js
            • images
        • site1
        • site2
        • site3
  • views
  • utils
  • settings.py

我将SASSCompiler添加到PIPELINE_COMPILERS,然后我添加了要压缩的文件的路径:

# pipeline settings
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE_COMPILERS = (
  'pipeline.compilers.sass.SASSCompiler',
)
PIPELINE_CSS = {
    'main': {
        'source_filenames': (
          'css/test.scss',
        ),
        'output_filename': 'css/test2.css',
    },
}

最后我将css链接到我的XHTML索引:

{% load compressed %}
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        {% compressed_css 'main' %}
    </head>

我不明白我做错了什么。 谢谢你的帮助!


更新

当我运行collectstatic时,这将复制django中的文件而不是我的项目

F:\DEV\DJANGO\apps\test>python manage.py collectstatic

You have requested to collect static files at the destination
location as specified in your settings:

    F:\test\forum\skins\default\media

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes
Copying 'F:\DEV\DJANGO\apps\django\django\contrib\admin\static\admin\css\base.
css'
Copying 'F:\DEV\DJANGO\apps\django\django\contrib\admin\static\admin\css\chang
elists.css'
Copying 'F:\DEV\DJANGO\apps\django\django\contrib\admin\static\admin\css\dashb
oard.css'
Copying 'F:\DEV\DJANGO\apps\django\django\contrib\admin\static\admin\css\forms
.css'
Copying 'F:\DEV\DJANGO\apps\django\django\contrib\admin\static\admin\css\ie.cs
s'
[etc .... ]

但路径F:\test\forum\skins\default\media错误,我的项目位于 在F:\DEV\DJANGO\apps\test\forum\skins\default\media

然后我试图找到静态文件:

F:\DEV\DJANGO\apps\test> python manage.py findstatic css/main.css

No matching file found for 'css/main.css'.

但文件存在。

1 个答案:

答案 0 :(得分:6)

在Django的settings.py中,STATIC_ROOT变量告诉Django在哪里移动静态文件,而STATIC_URL是用户将看到的URL路径以及从哪里可以看到访问浏览器中的文件。请参阅有关静态文件的Django文档:

https://docs.djangoproject.com/en/dev/ref/settings/#static-files

例如,我们假设您在settings.py文件中包含以下内容:

STATIC_ROOT = "/var/www/example.com/static/"
STATIC_URL = "/static/"

现在,让我们在/home/fuiba/git/your-django-project/内的同一台计算机上进行软件开发。在你的Django项目中,你有一个名为static的子目录,在该目录中你有一个名为custom.css的文件。该文件的完整路径是:

`/home/fuiba/git/your-django-project/static/custom.css`

现在,在运行python manage.py collectstatic后,您的样式表将移至STATIC_ROOT目录。现在启动Web服务器,您可以通过项目STATIC_URL访问静态文件。因此,我们假设您在端口8000上的localhost上运行Web服务器,您可以从以下位置的浏览器访问样式表:

http://localhost:8000/static/custom.css

好的,这是它如何运作的基础。在您的情况下,您似乎是在Windows下开发,所以有一些注意事项。首先,不要在路径中使用反斜杠(&#39; \&#39;),只使用正斜杠。但是,您仍然必须指定驱动器号和冒号。因此,让我们将您的STATIC_ROOT设置为:

STATIC_ROOT = "F:/DEV/DJANGO/apps/test-static-root/"

我选择这个以便您不会污染您的测试项目目录,并且应该在上面的位置创建一个兄弟目录,其中包含您的静态文件。

让我知道你是如何相处的,我会尝试提供更多细节。

祝你好运!