静态文件Whitenoise Heroku Django问题

时间:2017-10-09 20:45:24

标签: django heroku

我有一个在Django和Django Rest Framework中开发的API。我们在“普通”Django中需要一个页面,每个月可能会打开一次(所以静态文件不需要CDN)。 Gunicorn + whitenoise就是我们的目标。

collectstatic在构建阶段和构建阶段后都能正常工作。

页面上生成的网址为href=/static/css/edit_card.a1c6e0f9f12e.css/,但控制台显示找不到该资源的404,且该网页没有应用任何样式。

相关的django设置:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static_media/')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR + "/static_folder/"),
]

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

回购中的相关文件位于/static_folder/css/edit_card.css 运行collectstatic后,heroku实例上的相关文件位于 static_media/css/edit_card.a1c6e0f9f12e.css(与普通版本和其他压缩文件一起)

我可以手动访问此链接url/static/css/edit_card.css,这非常奇怪。

DEBUG = True时这很好用。在False /生产时,它没有。

有人能指出我正确的方向吗?感谢。

编辑:

Template

{% load static %}
<link rel="stylesheet" type="text/css" href={% static "css/edit_card.css" %}/>

1 个答案:

答案 0 :(得分:2)

此响应可能为时已晚,但我很惊讶没有人注意到该错误。

您的模板如下:

<link rel="stylesheet" type="text/css" href={% static "css/edit_card.css" %}/>

问题在于href属性未加引号,并且将最后一个/用作路径的一部分。这就是URL的原因:href=/static/css/edit_card.a1c6e0f9f12e.css/(请注意末尾的/)。

解决方案是:

<link rel="stylesheet" type="text/css" href="{% static "css/edit_card.css" %}" />

URL在引号之间,路径后有一个空格。