Django 正在加载静态文件而不是从生产后端存储的图像
Django is loading static files but not image that are stored from backend in production
正如标题所说,在我将 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)
请注意,如果 DEBUG=True
在这种情况下,您的 媒体网址 的 static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
只会添加到您的 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
中创建一个 forlder name staic cdn
STATIC_CDN = BASE_DIR / 'static_cdn'
and in bottom
STATIC_ROOT = STATIC_CDN
# MEDIA
MEDIA_ROOT = MEDIA_DIR
MEDIA_URL = '/media/'
and then run
python manage.py collectstatic
在你的终端中它会做什么它会在你的静态 cdn 文件夹中创建你的静态文件的副本,因为云基础存储在你的 cdn 文件夹中查看你的静态或媒体文件
并确保安装 pillow
如果仍然出现错误请告诉我
正如标题所说,在我将 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)
请注意,如果 DEBUG=True
在这种情况下,您的 媒体网址 的 static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
只会添加到您的 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
中创建一个 forlder name staic cdnSTATIC_CDN = BASE_DIR / 'static_cdn'
and in bottom
STATIC_ROOT = STATIC_CDN
# MEDIA
MEDIA_ROOT = MEDIA_DIR
MEDIA_URL = '/media/'
and then run
python manage.py collectstatic
在你的终端中它会做什么它会在你的静态 cdn 文件夹中创建你的静态文件的副本,因为云基础存储在你的 cdn 文件夹中查看你的静态或媒体文件 并确保安装 pillow
如果仍然出现错误请告诉我