在Django模板中包含图像文件显示链接断开?

1 投票
4 回答
4148 浏览
提问于 2025-04-16 11:55

大家好,

我试过了论坛上找到的一些建议,但很遗憾,我还是卡在这里。图片在模板中没有显示出来。经过追踪,我发现错误主要有两个:

1) 在应该显示图片的地方,链接还是坏掉了,并且出现了错误信息:

Failed to load resource: the server responded with a status of 404 (NOT FOUND),
**http://127.0.0.1:8000/Point3D/grafiek/laptop.jpg**

路径是对的,但找不到图片……图片应该在我的 MEDIA_ROOT 里,或者我收到:

Resource interpreted as image but transferred with MIME type text/html with:
**http://127.0.0.1:8000/Point3D/grafiek/**

2) 另一个错误是,如果我访问:http://127.0.0.1:8000/media/,我会看到:

Permission denied: /media/

这可能和问题有关。

除此之外,我现在按照罗伯特的解决方案操作,但还是没有成功……

如果有人能帮忙,我将非常感激!

4 个回答

1

你有没有在你的标签中加入 {{ MEDIA_ROOT }} 呢?

另外,确保你在调用模板的时候使用了 RequestContext 对象,因为如果不这样做,{{ MEDIA_ROOT }} 在你的模板中就不会被设置。可以试试用 django.views.generic.simple.direct_to_template 来替代 django.shortcuts.render_to_response。需要注意的是,direct_to_template 的调用方式和 render_to_response 一样,只不过它把 request 作为第一个参数传入。

from django.views.generic.simple import direct_to_template
# your view code here
return direct_to_template(request, 'path/to/template.html', **kwargs)
1

在/media/上出现“权限被拒绝”的情况是正常的,因为如果不这样设置,你网页上的每个用户都能看到那个目录里的所有文件。这就像把Apache配置成允许目录索引一样,这在大多数情况下并不是你想要的。你可以试着在浏览器里直接粘贴完整的文件网址(记得在路径中包含媒体网址!):

http://127.0.0.1:8000/media/Point3D/grafiek/laptop.jpg

如果这样还不行,确保你已经正确配置了Django或Apache,以便能够提供你想访问的静态文件。

补充:
还有一个可能导致问题的原因:/media/是管理员媒体网址的默认设置。如果你的管理员媒体网址和媒体网址是一样的,那就不太好。你需要把它们改成不同的,确保你的MEDIA_URL和ADMIN_MEDIA_PREFIX不一样。

1

你的模板看起来怎么样?应该是像这样的:

<img src="{{ MEDIA_URL }}Point3D/grafiek/laptop.jpg" alt="" />

我猜你的图片的正确路径应该是 http://127.0.0.1:8000/media/Point3D/grafiek/laptop.jpg

撰写回答