在 Django 中检索 imageField 的 url 的最佳方法
Best way to retrieve the url of a imageField in django
我使用的是以下型号:
class Product(models.Model):
# some other stuff
pictures = models.ManyToManyField(Image)
class Image(models.Model):
# MEDIA_ROOT = /full/path/to/my/media/folder/
image = models.ImageField(upload_to=settings.MEDIA_ROOT, default=DEFAULT_PROFILE_PICTURE)
然后在一个视图中我想检索图像所以我 运行 下面的代码:
for pic in product.pictures.all():
pictures += [pic.image.url.replace(settings.PROJECT_ROOT, url)]
这里的问题是 pic.image.url
给我系统路径,而我期待的是相对路径(类似于 /media/mypicture.jpg
)所以为了解决这个问题我使用了 replace
功能,但在我看来它应该是更好的方法。
如何构建模型或访问图像以避免使用 replace
方法?
提前致谢
您不应将 MEDIA_ROOT
用作 upload_to
值。如果你想上传到 MEDIA_ROOT
而没有任何子目录,那么只需使用空字符串 ''
:
image = models.ImageField(upload_to='')
我使用的是以下型号:
class Product(models.Model):
# some other stuff
pictures = models.ManyToManyField(Image)
class Image(models.Model):
# MEDIA_ROOT = /full/path/to/my/media/folder/
image = models.ImageField(upload_to=settings.MEDIA_ROOT, default=DEFAULT_PROFILE_PICTURE)
然后在一个视图中我想检索图像所以我 运行 下面的代码:
for pic in product.pictures.all():
pictures += [pic.image.url.replace(settings.PROJECT_ROOT, url)]
这里的问题是 pic.image.url
给我系统路径,而我期待的是相对路径(类似于 /media/mypicture.jpg
)所以为了解决这个问题我使用了 replace
功能,但在我看来它应该是更好的方法。
如何构建模型或访问图像以避免使用 replace
方法?
提前致谢
您不应将 MEDIA_ROOT
用作 upload_to
值。如果你想上传到 MEDIA_ROOT
而没有任何子目录,那么只需使用空字符串 ''
:
image = models.ImageField(upload_to='')