模板提供了错误的媒体目录路径,Django 找不到图像
Posted
技术标签:
【中文标题】模板提供了错误的媒体目录路径,Django 找不到图像【英文标题】:Template is giving wrong path to media directory and Django can't find the images 【发布时间】:2021-01-17 17:38:02 【问题描述】:我有 2 个模型,它们的关系是 OneToMany。因此,一个“ivel”(葡萄牙语中的属性)有很多图片(葡萄牙语中的“fotos”或“imagens”)。
我的 Web 应用程序结构非常简单,我在设置中进行了配置:
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
urls.py
urlpatterns = [
path('', index, name='index'),
path('sobre_nos/', sobre_nos, name='sobre_nos'),
path('', include('imoveis.urls')),
path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
因此,每张上传的图片都直接进入“媒体”结构,属性图像进入'media/imoveis/%Y/%m/%d'
。
我想使用基本的引导轮播显示与模板中的属性关联的所有图片:
imovel.html
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
% for foto in fotos_do_imovel %
% if foto.imagem %
<div class="carousel-item activate">
<img class="d-block w-100" src=" foto.imagem ">
</div>
% else %
<div class="carousel-item">
<img class="d-block w-100" src=" imovel.foto_principal ">
</div>
% endif %
</div>
% endfor %
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Anterior</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Proxima</span>
</a>
</div>
问题是,当我访问imovel.html
的页面时,找不到图片:
imoveis/2020/10/01/pexels-photo-1571463.jpeg
imoveis/2020/10/01/pexels-photo-1643383.jpeg
[01/Oct/2020 21:20:35] "GET /imovel/3 HTTP/1.1" 200 5952
Not Found: /imovel/imoveis/2020/10/01/pexels-photo-1643383.jpeg
Not Found: /imovel/imoveis/2020/10/01/pexels-photo-1571463.jpeg
[01/Oct/2020 21:20:35] "GET /imovel/imoveis/2020/10/01/pexels-photo-1571463.jpeg HTTP/1.1" 404 3187
[01/Oct/2020 21:20:35] "GET /imovel/imoveis/2020/10/01/pexels-photo-1643383.jpeg HTTP/1.1" 404 3187
我在视图中打印了图片路径以检查那里是否正常,并且视图正在发送正确的路径,我不知道 imovel/
被添加到正确路径前面的位置,而且我不知道怎么解决。
(英语不是我的第一语言,所以我很抱歉有一些错误)
【问题讨论】:
【参考方案1】:对于FileField
或ImageField
,您应该使用文件的.url
attribute [Django-doc]:
<img class="d-block w-100" src=" foto.imagem<b>.url</b> ">
注意:Django 不为生产中的静态和媒体文件提供服务。在生产中, 您将需要配置像 Apache 或 nginx 这样的网络服务器。 Django documentation 有关于配置网络服务器的部分。
【讨论】:
以上是关于模板提供了错误的媒体目录路径,Django 找不到图像的主要内容,如果未能解决你的问题,请参考以下文章