在Django模板中包含图像文件显示链接断开?
大家好,
我试过了论坛上找到的一些建议,但很遗憾,我还是卡在这里。图片在模板中没有显示出来。经过追踪,我发现错误主要有两个:
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 个回答
你有没有在你的标签中加入 {{ 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)
在/media/上出现“权限被拒绝”的情况是正常的,因为如果不这样设置,你网页上的每个用户都能看到那个目录里的所有文件。这就像把Apache配置成允许目录索引一样,这在大多数情况下并不是你想要的。你可以试着在浏览器里直接粘贴完整的文件网址(记得在路径中包含媒体网址!):
http://127.0.0.1:8000/media/Point3D/grafiek/laptop.jpg
如果这样还不行,确保你已经正确配置了Django或Apache,以便能够提供你想访问的静态文件。
补充:
还有一个可能导致问题的原因:/media/是管理员媒体网址的默认设置。如果你的管理员媒体网址和媒体网址是一样的,那就不太好。你需要把它们改成不同的,确保你的MEDIA_URL和ADMIN_MEDIA_PREFIX不一样。
你的模板看起来怎么样?应该是像这样的:
<img src="{{ MEDIA_URL }}Point3D/grafiek/laptop.jpg" alt="" />
我猜你的图片的正确路径应该是 http://127.0.0.1:8000/media/Point3D/grafiek/laptop.jpg