尝试从django中的数据库显示图像时图像被破坏

时间:2015-08-22 09:43:25

标签: python django

Settings.py

STATIC_URL = '/static/'
MEDIA_ROOT='/home/akanksha/bookepdia/media/'
MEDIA_URL = '/media/' 
TEMPLATE_DIRS = ('/home/akanksha/bookepdia/templates',)

Model.py

class Image(models.Model):
title = models.CharField(max_length=255)
photo = models.ImageField(upload_to='/home/akanksha/bookepdia/media/images/')

Url.py

urlpatterns = patterns('',

url(r'^$', 'bookepdia.views.home', name='home'),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Views.py

def home(request):
    photos = Image.objects.all()
    return render_to_response('display.html', {'photos' : photos})

display.html

<html>
<h3>Images of books</h3>
<img src="/media/images/image_name" />
{% for p in photos %}
    <img src="{{p.photo.url}}" />
{% endfor %}
</html>

现在,我的问题是当我添加/ media / images / image_name时会显示图像但是当我使用{{p.photo.url}}时,图像会显示为损坏的图标。 我发现它的路径为/ home / akanksha / bookepdia / media / images / image_name。 现在,我想为每个URL编辑它,以便它作为/ media / images / image_name。

2 个答案:

答案 0 :(得分:2)

你不应该在upload_to中给ImageField提供绝对路径,它应该是相对于你的MEDIA_ROOT的路径。

答案 1 :(得分:1)

ImageField的

if(window.localStorage.length > 0) { var foo = ''; for (var i = 0, len = localStorage.length; i < len; i++) { foo += localStorage.getItem(localStorage.key(i)); } //con $('#nv').html(foo); } 属性不是绝对路径,而是相对于upload_to设置。

在你的情况下它应该是这样的:

MEDIA_ROOT

请参阅文档:https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.FileField.upload_to

  

<强> FileField.upload_to

     

将附加到MEDIA_ROOT设置的本地文件系统路径,以确定url属性的值。