在Django模板中包含图像文件显示损坏的链接?

时间:2011-02-16 13:14:27

标签: python django image png matplotlib

全部,

我试过了tips found on the forum。不幸的是我仍然被卡住了。 图像不会出现在模板中。 至于我现在追踪的错误,它们是双重的:

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/

也许这与它有关。

其余的我现在跟着roberts solution,但没有运气..

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

你的模板是什么样的?它应该是这样的:

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

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

答案 1 :(得分:1)

/ media /上的权限被拒绝正是应该发生的事情,否则你页面的每个用户都可以查看该目录中的所有文件(与配置Apache以允许索引目录相同,即,在所有情况下,不是你想要的。尝试通过粘贴完整的URL来访问浏览器中的文件,(并在你的路径中包含媒体网址!):

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

如果这不起作用,请确保将Django或Apache配置为提供您尝试访问的静态文件。

修改
还有一件可能导致您麻烦的事情:/ media /是管理媒体网址的默认设置。如果您的管理媒体网址和您的媒体网址相同,则无济于事。更改,以便您的MEDIA_URL和ADMIN_MEDIA_PREFIX不相同。

答案 2 :(得分: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)

答案 3 :(得分:1)

假设您的文件系统上的媒体位于:

/home/username/django-project/media/images/favicon.ico

settings.py中,您应该:

import os

PROJECT_PATH = os.path.dirname(__file__)
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/media/'

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.media',
)

您的项目urls.py还应包含以下内容,这些内容仅适用于DEBUG模式:

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT.replace('\\','/')}, name='media'),
    )

您的模板应包含以下媒体:

<link rel="icon" href="{{ MEDIA_URL }}images/favicon.ico" />