如何解决如何在 Heroku 上使用 Whitenoise 编写动态 (Django) URL 来提供图像?
我在这里关注了 this answer 并阅读了有关提供静态图片的提示 here。但我很困惑:官方 Whitenoise 文档说以这种方式编写 URL:
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
而不是这样:
<!-- DON'T WRITE THIS -->
<img src="/static/images/hi.jpg" alt="Hi!" />
但如果我要使用动态网址,例如 src="{{recipe.image.url}}"
,我该怎么做?
解决方法
您拥有的第一个 img 标签是从静态目录中提取静态文件的正确方法。 Whitenoise 只是帮助在 Heroku 服务器上提供图像/媒体文件,但本地开发不需要它。但是,要正确使用静态,您需要在每个模板的顶部加载静态。示例:
<!-- template.html -->
{% extends 'base.html' %}
{% block content %}
{% load static %}
<!-- show static image -->
<img src="{% static 'images/hi.jpg' %}" alt="Hi!" />
<!-- show dynamically -->
<img src="{{ item.image.url }}" alt="{{ item.name }}">
{% endblock %}
注意图片的实际路径images/hi.jpg
用单引号括起来,以免与外面的双引号冲突
我解决了这个问题,但我不明白为什么。所以如果有人可以解释它,我会接受这个答案。我有两个根文件夹,static
和 staticfiles
。每个人都有自己的文件夹 images
和 media
。我删除了所有现有的图像,对代码进行了更改(见下文),并重新上传了图像——还有中提琴!它奏效了——并且在 Heroku 上也奏效了。
STATIC_URL = '/static/' # Didn't work
STATIC_URL = '/staticfiles/' # Yes,worked
STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles')
STATIC_TMP = os.path.join(BASE_DIR,'static')
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
MEDIA_URL = '/media/' # Didn't work
MEDIA_URL = '/staticfiles/media/' # Yes,worked
MEDIA_ROOT = os.path.join(BASE_DIR,'media') # Didn't work
MEDIA_ROOT = os.path.join(BASE_DIR,'staticfiles/media/') # Yes,worked
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。