Django 正在加载静态文件,但不加载生产中从后端存储的图像

问题描述 投票:0回答:2

如标题所示,当我将DEBUG更改为False后,从管理面板上传的图像未加载。但是,其他静态文件(例如仅从 HTML 端加载的 css 文件和图像)可以正确呈现。

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('marathon.urls', namespace='homepage')),
    path('accounts/', include('allauth.urls')),
    path('logout', LogoutView.as_view(), name='logout'),
    ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

渲染图像的html文件

    <div class="js-billboard">
        {% for slide in slider %}
            <div class="billboard__item">
                <figure><img src="{{ slide.image.url }}" alt="Mountain Marathon"></figure>
                <div class="billboard__detail">
                    <div class="grid-container">
                        <div class="grid-x grid-padding-x">
                            <div class="col-12 cell">
                                <h2>{{ slide.title }}</h2>
                                <p><span>{{ slide.description }}</span></p>
                                <a href="{{ slide.link }}" class="button">{{ slide.link_title }}</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        {% endfor %}
    </div>
django production django-staticfiles
2个回答
2
投票

我假设您的项目中有以下代码行

urls.py

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

请注意,在这种情况下,如果

static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
,您的 媒体 url
DEBUG=True
只会添加到您的 urlpatterns 列表中。 Django 不会在生产环境中或在
DEBUG=False

时提供媒体文件

我建议使用在线存储 API,如 AWS3、cloudinary 甚至 firebase。这些确实提供了提供媒体文件的功能,无论是

DEBUG=True
还是
DEBUG=False


1
投票
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)

将其添加到您的主 urls.py 文件夹中,并在您的主项目和 settings.py 中创建一个名为 staic cdn 的转发器

STATIC_CDN = BASE_DIR / 'static_cdn'

and in bottom 

STATIC_ROOT = STATIC_CDN

# MEDIA
MEDIA_ROOT = MEDIA_DIR
MEDIA_URL = '/media/'

然后运行

python manage.py collectstatic 

在您的终端中,它将执行以下操作:它将在您的静态 CDN 文件夹中创建静态文件的副本,因为云基础存储会在您的 CDN 文件夹中查找您的静态或媒体文件 并确保安装枕头

如果仍然出现错误请告诉我

© www.soinside.com 2019 - 2024. All rights reserved.