ImageField的Image.url返回view.py中的本地路径。我已在settings.py中检查了MEDIA_ROOT和MEDIA_URL,但image.url(此外,image.path和image.name)始终返回本地完整路径。我可以使用正确的URL访问该文件,并且文件保存了正确的路径。
请帮助我!
答案 0 :(得分:1)
我刚刚使用Django 1.8.3
和Python 2.7.6
从头开始测试了一个示例,它就像一个魅力:
# models.py:
from django.db import models
class ImageTest(models.Model):
photo = models.ImageField(upload_to='photos')
# settings.py:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = 'media/'
我为此模型设置了管理员,上传了一张图片,并通过shell我测试了此图片的网址字段:
>>> from main.models import ImageTest
>>> ImageTest.objects.all()[0].photo.url
'media/photos/zunzun_logo.png'
你可以看到它是一条相对路径。我实际上不知道你的情况会发生什么。也许如果你可以粘贴一些代码,我可以帮你多一点;)。希望这可以帮助您找到解决方案。
答案 1 :(得分:0)
我也有这个问题。
获取完整本地路径的常见原因是当您使用函数更改upload_to
字段中的路径时。您只需确保该函数返回相对路径,而不是完整路径。
在我的情况下,如果不存在,我的函数将创建必要的dirs。我需要使用完整的MEDIA_ROOT
路径,但必须确保它返回upload_to
的相对路径值。