【问题标题】:Images broken while trying to display it from database in django尝试从 django 的数据库中显示图像时图像损坏
【发布时间】:2015-08-22 09:43:24
【问题描述】:

Settings.py

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

模型.py

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

网址.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 工作。

【问题讨论】:

  • 在生成的 display.html 中,您看到什么代替了{{p.photo.url}}?是/home/akanksha/bookepdia/media/images/&lt;something&gt;吗?
  • 是的,这正是我所看到的

标签: python django


【解决方案1】:

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

【讨论】:

  • 没关系,我想在任何一种情况下它的行为都是一样的。
  • 您必须上传新图片,使用旧upload_to 路径上传的图片不会受到该更改的影响 - 这意味着 URL 仍然是错误的。
【解决方案2】:

ImageField 的upload_to 属性不是绝对路径,它是相对于MEDIA_ROOT 设置的。

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

photo = models.ImageField(upload_to='images')

查看文档:https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.FileField.upload_to

FileField.upload_to

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

【讨论】:

  • 我在进行更改后尝试过,但它仍然将图像显示为损坏的图标
  • 现在{p.photo.url} 是什么?
  • 和之前一样 /home/akanksha/bookepdia/media/images/image_name
  • 你上传新图片吗? upload_to更改之前上传的图片不受影响
  • 我没有上传任何新图片。在upload_to更改之前已上传的图片没有变化。
猜你喜欢
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2012-08-20
  • 1970-01-01
相关资源
最近更新 更多