当运行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
设置字典是巨大的,所以我不会张贴整个事情,但它的一些部分是:
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管道特定的STATICFILES_FINDERS,但没有区别。
有谁能解释一下为什么在collectstatic中找不到png文件,而在findstatic中可以找到?
3条答案
按热度按时间i2byvkas1#
您的问题与Django项目中的this bug有关。
简而言之,django-pipeline正在使用Django的
CachedStaticFilesStorage
对url()
调用进行后处理,以将md5校验和附加到文件名中(更多细节在这里),并且不会检测它是否在注解中。如果您查看
jquery-ui.css
(和类似的)文件的头,会发现一条以在这一行的URL中,有一个参数被解释为
url()
调用,并生成您看到的错误。要解决这个问题,您可以简单地从
jquery-ui.css
中删除上面的行,collectstatic
应该可以正常工作。8iwquhpp2#
可以使用
--no-post-process
标记:2vuwiymt3#
当您试图指向CSS属性中无效的静态文件时,会导致此错误:
因此,要想让错误永远消失,您所需要做的就是确保指向正确的静态文件路径。
更多信息?在这个代码块的后台发生的是,url属性需要一个有效的参数,当它找到时返回None,因此引发了异常,因为它不能在django设置文件中设置的静态文件存储中存储None类型的值。