ValueError: 找不到文件 <pipeline.storage.PipelineCachedStorage 对象>
我正在尝试在 Django 1.6.3 上使用 django pipeline 来编译 SASS 和压缩 CSS 文件,但在访问我的网站后出现了以下错误:
ValueError: 找不到文件 'css/test2.css',在 <pipeline.storage.PipelineCachedStorage object at 0x0585DF50> 中。
我按照 readthedocs.org 上的指南配置了 pipeline:我把 pipeline 加入了 INSTALLED_APPS
,然后定义了 STATIC_URL
和 STATIC_ROOT
:
STATIC_URL = '/test/forum/skins/default/media/'
STATIC_ROOT = '/test/forum/skins/default/media/'
文件夹结构:
- test
- forum
- skins
- default
- media(静态文件)
- css
- js
- images
- media(静态文件)
- site1
- site2
- site3
- default
- skins
- forum
- 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 个回答
在Django的settings.py
文件中,STATIC_ROOT
这个变量告诉Django要把你的静态文件放到哪里,而STATIC_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端口上运行web服务器,你可以在浏览器中通过以下地址访问样式表:
http://localhost:8000/static/custom.css
好的,这就是它的基本工作原理。在你的情况下,你似乎是在Windows系统下开发,所以有一些注意事项。首先,路径中不要使用反斜杠('\'),只用正斜杠。同时,你仍然需要指定驱动器字母和冒号。所以,我们把你的STATIC_ROOT
设置为:
STATIC_ROOT = "F:/DEV/DJANGO/apps/test-static-root/"
我这样选择是为了不让你的测试项目目录变得杂乱,并且在上面的路径下应该创建一个兄弟目录,里面放你的静态文件。
告诉我你的进展,我会尽量提供更多的细节。
祝你好运!