Skip to main content
 首页 » 编程设计

python之django 管道抛出 ValueError : the file could not be found

2025年05月04日13arxive

运行 python manage.py collectstatic --noinput 时出现以下错误:

Post-processing 'jquery-ui-dist/jquery-ui.css' failed! 
Traceback (most recent call last): 
File "manage_local.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line 
utility.execute() 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 359, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/core/management/base.py", line 294, in run_from_argv 
self.execute(*args, **cmd_options) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/core/management/base.py", line 345, in execute 
output = self.handle(*args, **options) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 193, in handle 
collected = self.collect() 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 145, in collect 
raise processed 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 257, in post_process 
content = pattern.sub(converter, content) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 187, in converter 
hashed_url = self.url(unquote(target_name), force=True) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 132, in url 
hashed_name = self.stored_name(clean_name) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 292, in stored_name 
cache_name = self.clean_name(self.hashed_name(name)) 
File "/Users/michaelbates/GoogleDrive/Development/inl/venv/lib/python3.4/site-packages/django/contrib/staticfiles/storage.py", line 95, in hashed_name 
(clean_name, self)) 
ValueError: The file 'jquery-ui-dist/"images/ui-icons_555555_256x240.png"' could not be found with <pipeline.storage.PipelineCachedStorage object at 0x1073e2c50>. 

如果我运行 python manage.py findstatic jquery-ui-dist/"images/ui-icons_555555_256x240.png" 我得到:

Found 'jquery-ui-dist/images/ui-icons_555555_256x240.png' here: 
      /Users/michaelbates/GoogleDrive/Development/inl/node_modules/jquery-ui-dist/images/ui-icons_555555_256x240.png 
      /Users/michaelbates/GoogleDrive/Development/inl/staticfiles/jquery-ui-dist/images/ui-icons_555555_256x240.png 

这里是一些相关的设置:

STATICFILES_FINDERS = ( 
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'pipeline.finders.AppDirectoriesFinder', 
    'pipeline.finders.PipelineFinder', 
) 
 
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage' 
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
 
STATICFILES_DIRS = ( 
    os.path.join(BASE_DIR, 'static'), 
    os.path.join(BASE_DIR, 'node_modules'), 
) 

我的 PIPELINE settings dict 很大,所以我不会发布整个内容,但其中的某些部分是:

PIPELINE = { 
    'STYLESHEETS': { 
        'pricing': { 
            'source_filenames': ( 
                'jquery-ui-dist/jquery-ui.min.css', 
            ), 
            'output_filename': 'css/pricing.min.css' 
        }, 
    } 
    'JS_COMPRESSOR': 'pipeline.compressors.yuglify.YuglifyCompressor', 
    'CSS_COMPRESSOR': 'pipeline.compressors.yuglify.YuglifyCompressor', 
    'COMPILERS': ( 
        'pipeline.compilers.sass.SASSCompiler', 
    ) 
} 

我已经尝试将 STATICFILES_FINDERS 更改为特定于 django 管道的那些,但这没有任何区别。

谁能阐明为什么在 collectstatic 期间找不到 png 文件但可以使用 findstatic?

请您参考如下方法:

您的问题与 this bug 有关在 Django 项目上。

简而言之,django-pipeline 正在使用 Django 的 CachedStaticFilesStorage 对 url() 调用进行后处理,以将 md5 校验和附加到文件名 ( more details here ),并且不会' 检测它何时在评论中。

如果您查看 jquery-ui.css(和类似的)文件的 header ,会有一条以

开头的注释
  • To view and modify this theme, visit [...]

在这一行的 URL 中,有一个参数被解释为 url() 调用并生成您看到的错误。

要解决此问题,您可以简单地从 jquery-ui.css 中删除上面的行,collectstatic 应该可以正常工作。