Django ValueError:缺少静态文件清单条目,但清单似乎显示了该条目

Posted

技术标签:

【中文标题】Django ValueError:缺少静态文件清单条目,但清单似乎显示了该条目【英文标题】:Django ValueError: Missing staticfiles manifest entry, but the manifest appears to show the entry 【发布时间】:2020-01-15 15:27:12 【问题描述】:

在部署到 Heroku 的 Django 1.11 应用程序上。加载根 URL / 时(我假设 Django 在 homepage.html 模板中到达 % static 'angular/angular.min.js' % 时)我收到以下错误:

ValueError: Missing staticfiles manifest entry for 'angular/angular.min.js'
  File "django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "homepage/views.py", line 87, in homepage
    "latest_python3": Version.objects.filter(supports_python3=True).select_related("package").distinct().order_by("-created")[0:5]
  File "django/shortcuts.py", line 30, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "django/template/loader.py", line 68, in render_to_string
    return template.render(context, request)
  File "django/template/backends/django.py", line 66, in render
    return self.template.render(context)
  File "django/template/base.py", line 207, in render
    return self._render(context)
  File "newrelic/api/function_trace.py", line 60, in dynamic_wrapper
    return wrapped(*args, **kwargs)
  File "django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "django/template/loader_tags.py", line 177, in render
    return compiled_parent._render(context)
  File "newrelic/api/function_trace.py", line 60, in dynamic_wrapper
    return wrapped(*args, **kwargs)
  File "django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "django/template/defaulttags.py", line 411, in render
    return strip_spaces_between_tags(self.nodelist.render(context).strip())
  File "django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "newrelic/hooks/framework_django.py", line 765, in wrapper
    return wrapped(*args, **kwargs)
  File "django/template/loader_tags.py", line 72, in render
    result = block.nodelist.render(context)
  File "django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "django/templatetags/static.py", line 105, in render
    url = self.url(context)
  File "django/templatetags/static.py", line 102, in url
    return self.handle_simple(path)
  File "django/templatetags/static.py", line 117, in handle_simple
    return staticfiles_storage.url(path)
  File "django/contrib/staticfiles/storage.py", line 162, in url
    return self._url(self.stored_name, name, force)
  File "django/contrib/staticfiles/storage.py", line 141, in _url
    hashed_name = hashed_name_func(*args)
  File "django/contrib/staticfiles/storage.py", line 432, in stored_name
    raise ValueError("Missing staticfiles manifest entry for '%s'" % clean_name)

清单中有什么?

我对@9​​87654321@的理解是manifest是一个叫staticfiles.json的文件。该文件似乎包含正确的条目(出于格式原因,我已删除所有不相关的条目):

$ heroku run cat ./staticfiles/staticfiles.json
Running cat ./staticfiles/staticfiles.json
"paths": "angular/angular.min.js": "angular/angular.min.df1c56732ca5.js", "angular/controllers.js": "angular/controllers.af8e9f9a2645.js", "version": "1.0"

相关设置:

我关注了Heroku's instructions for service Static Files with Django:

# in requirements.txt
whitenoise

# in settings/base.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATIC_URL = "/static/"
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    # ...others here too
]

django_heroku.settings(locals())

(更新:STATICFILES_STORAGE)

根据以下建议之一,我删除了 STATICFILES_STORAGE 的值。 django-heroku 将STATICFILES_STORAGE 的值设置为whitenoise.storage.CompressedManifestStaticFilesStorage。我通过将 del STATICFILES_STORAGE 添加到我的 settings.py 文件的末尾来删除它。 Django 然后将值重置为默认的django.contrib.staticfiles.storage.StaticFilesStorage。结果是所有静态文件都在浏览器中出现 404 或 MIME 类型错误。

【问题讨论】:

【参考方案1】:

提示通过搜索到达这里的任何人

我遇到了同样的问题,就我而言,我必须删除开头的斜杠

% static '/admin/js/vendor/jquery/jquery.js' % 更改为% static 'admin/js/vendor/jquery/jquery.js' % 解决了我的问题。


我知道这与这个确切的问题没有直接关系,但是因为我带着我的问题来到这里,所以我想我会在这里发布它,希望这将有助于将来有人在这里登陆。

【讨论】:

为了它的价值,找到这个回复也解决了我的问题!!!谢谢【参考方案2】:

更新:此问题现已修复。遗憾的是,该解决方案对其他人没有用。对此表示歉意。问题是我的设置被正在导入的另一个模块中的设置覆盖。我在上面的问题中列出的设置实际上适用于 Heroku。对不起大家,感谢帮助我调试的人。

【讨论】:

不确定这里有什么正确的程序...我应该删除这个问题吗?我应该留下它吗?希望社区提供任何关于正确处理发现我的错误不在问题本身的方法的指导。【参考方案3】:

您是否手动创建了staticfiles 目录,然后在部署前运行django-admin collectstatic

这是docs。

【讨论】:

谢谢。我确实手动创建了staticfiles 目录,然后运行了heroku run python manage.py collectstatic。它运行,输出0 static files copied to '/app/staticfiles', 377 unmodified, 153 post-processed. 我猜angular.min.js 是未修改的之一。

以上是关于Django ValueError:缺少静态文件清单条目,但清单似乎显示了该条目的主要内容,如果未能解决你的问题,请参考以下文章

Django ValueError:缺少静态文件清单条目,但清单似乎显示了该条目

ValueError:即使在 collectstatic 之后也缺少静态文件清单条目

ValueError:缺少“favicon.ico”的静态文件清单条目

ValueError:缺少“favicon.png”的静态文件清单条目

Django 不加载静态文件 ValueError("Missing staticfiles manifest entry for '%s'" % clean_name)

Heroku 上的 Django - 缺少静态文件 manifest.json 文件