MEDIA_URL图像未显示在模板上

时间:2015-11-23 05:55:28

标签: python django

当我在heroku中部署图片时,我试图让图片显示在我的模板中,问题是当我通过管理页面上传图片时,图片链接为/media/media/images/8734HDFJ93.jpeg,请注意那里是两个media目录。单击链接时图像显示正常,但它不会显示在我的模板中。我尝试在模板中获取图像的方式是

<img src="/{{ MEDIA_URL }}{{ myobject_instance.image }}">

我的模型有一个图像字段如下

image = models.ImageField(upload_to="media/images", blank=True)

我在urls.py中有这些网址

url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True, }),
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True, }),

和我的settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'site_media')
MEDIA_URL = '/media/'

2 个答案:

答案 0 :(得分:1)

HTML中有双重媒体,因为upload_to附加到MEDIA_ROOT / MEDIA_URL。因为你有&#34;媒体/图像&#34;在upload_to这使它出现两次。如果你想摆脱它,只需将upload_to作为&#34;图像&#34;如果您想查看已上传的图片,请不要忘记移动目录。

其次是你的模板有一个小问题:

<img src="/{{ MEDIA_URL }}{{ myobject_instance.image }}">

应该是:

<img src="{{ MEDIA_URL }}{{ myobject_instance.image }}">

初始/将使它成为Django无法找到的网址。您将获得&#34; // media / media / images / 8734HDFJ93.jpeg&#34;而不是&#34; /media/media/images/8734HDFJ93.jpeg"

答案 1 :(得分:0)

如果您在渲染页面中检查元素,您将看到为该图像生成的URL。您可以使用此模板函数,而不是使用&#34; MEDIA_URL&#34;的变量:

{% get_media_prefix %}

所以,最后它会是这样的:

<img src="{% get_media_prefix %}{{ myobject_instance.image }}">

不要忘记在模板文件的开头加上这一行:

{% load static %}