Django模板正在将其名称添加到映像的路径中,从而阻止找到映像

Django模板正在将其名称添加到映像的路径中,从而阻止找到映像,django,Django,我正在使用ImageFields和upload\u上传到路径和名称来处理上传的图像,这些图像最终位于正确的目录media/img/whatevs/。在my settings.py中,我有以下两行代码 MEDIA\u ROOT=os.path.join(基本目录,'MEDIA') MEDIA\u URL='/MEDIA/' 现在,在匹配my/URL的模板中,这些图像正确显示,我可以看到/检查路径是否正确指向media/img/whatevs/imgname.jpg 但是,当我想在另一个名为prod

我正在使用ImageFields和
upload\u上传到
路径和名称来处理上传的图像,这些图像最终位于正确的目录
media/img/whatevs/
。在my settings.py中,我有以下两行代码

MEDIA\u ROOT=os.path.join(基本目录,'MEDIA')

MEDIA\u URL='/MEDIA/'

现在,在匹配my/URL的模板中,这些图像正确显示,我可以看到/检查路径是否正确指向
media/img/whatevs/imgname.jpg

但是,当我想在另一个名为
product.html
的模板中显示这些与/url不匹配的图像时,路径最终指向
product/media/img/whatevs/imgname.jpg
,而不是
media/img/whatevs/imgname.jpg
,结果是404。不知何故,模板的名称会自动添加到img src路径中。如果我检查它,我会看到文本指向
media/img/whatevs/imgname.jpg
,但是如果我将鼠标悬停在它上面,我会看到这个
http://127.0.0.1:8000/product/media/img/whatevs/imgname.jpg

为清晰起见,我添加了我在文件中的内容:

url.py

urlpatterns = [
    path('', HomeView.as_view(), name='home'),
    path('product/<slug>', ItemDetailView.as_view(), name='product'),
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
设置.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
product.html,其中不显示

<img src='media/img/whatevs/{{ item.slug }}' class="img-fluid" alt="">

home.html,它将在其中正确显示

 <img src='media/img/whatevs/{{ item.slug }}' class="card-img-top" alt="">

我正在调试模式下使用Django 3.0.6


你知道我做错了什么,为什么模板名被添加到路径中,以及如何防止吗?

如果你上传了图像,并且配置了设置
settings.py
,还有你的
url.py
你不需要强制html找到这样的图像吗

<img src='media/img/whatevs/{{ item.slug }}' class="img-fluid" alt="">
<img src='{{ item.slug.url }}' class="img-fluid" alt="">

你必须这样做

<img src='media/img/whatevs/{{ item.slug }}' class="img-fluid" alt="">
<img src='{{ item.slug.url }}' class="img-fluid" alt="">


这将更好地工作

它在主页上工作而不在其他页面上工作的原因是HTML锚路径是相对的,因为它们在开始时缺少斜杠(/)。但最好还是这样链接Item.image:

<img src='{{ item.image.url }}' class="img-fluid" alt="">

问题是在模板中使用相对路径,而不是:

<img src='media/img/whatevs/{{ item.slug }}' class="img-fluid" alt="">

你应该有:

<img src='/media/img/whatevs/{{ item.slug }}' class="img-fluid" alt="">

让模型返回完整路径是一个好主意,将路径放在模板中不是一个好做法