模板提供了错误的媒体目录路径,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】:

对于FileFieldImageField,您应该使用文件的.url attribute [Django-doc]:

&lt;img class="d-block w-100" src=" foto.imagem<b>.url</b> "&gt;

注意:Django 生产中的静态和媒体文件提供服务。在生产中, 您将需要配置像 Apachenginx 这样的网络服务器。 Django documentation 有关于配置网络服务器的部分。

【讨论】:

以上是关于模板提供了错误的媒体目录路径,Django 找不到图像的主要内容,如果未能解决你的问题,请参考以下文章

找不到 Django 媒体 URL

Django 找不到模板

找不到django模板

找不到模板文件 Django

找不到页面(404):django无法匹配路径

Django包含找不到模板