Django 静态文件图像未显示在 IBM Cloud Foundry 上

Django static file images not displayed on IBM Cloud Foundry

我已经阅读了一些其他话题、用谷歌搜索并尝试阅读文档,但找不到我要找的东西。我刚开始玩 Django,仅供参考。同样的代码在我的本地和 pythonanywhere.com

上运行良好

我的网络应用程序显示 'interests'、'images' 和 'urls' 的列表。 'image' 实际上是本地图像文件的路径。该应用程序可以很好地部署到 IBM Cloud Foundry 并且可以正常工作,除了静态文件中的图像不显示仅显示损坏的图像图标。

部署时,我在日志中看到消息“153 个静态文件已复制到‘/tmp/app/static’”,这让我相信 collectstatic 运行 没有问题。

来自 models.py:

class Interest(models.Model):
    interest = models.CharField(max_length=100)
    **image = models.ImageField(upload_to='interest/images')**
    url = models.URLField(blank=True)

    def __str__(self):
        return self.interest

来自 html 模板:

{% extends 'portfolio/base.html' %}

{% block about-class %} about-color-class {% endblock %}

{% block content %}

{% load static %}

<!-- Interests -->

<section class="interests">
    <div class="container">
        <div class="row">
            <h1>Some of my interests...</h1>
        </div>
        <div class="row-images">
            {% for interest in interests %}
            <div class="col-lg-1 col-md-1 col-xs-1">
                <a href="{{ interest.url }}"><**img src="{{ interest.image.url }}" alt=""**></a>
            </div>
            {% endfor %}
        </div>
    </div>
</section>

<!-- Interests End -->

来自settings.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

所以,我不确定发生了什么。任何建议表示赞赏。谢谢

我假设您在服务器上部署时设置了 debug=False。 问题是当你退出调试模式时,Django 无法提供 files/media 服务,这样做也不是一个好习惯。相反,您应该使用像 Nginx 或 apache 这样的网络服务器来为静态和媒体文件提供服务。

尽管有一个解决方法:

但我不推荐使用它。相反,请查看使用网络服务器提供文件服务。