如标题所示,当我将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>
我假设您的项目中有以下代码行
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
。
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 文件夹中查找您的静态或媒体文件 并确保安装枕头
如果仍然出现错误请告诉我