我想知道是否有办法将静态图像文件用作ImageField的默认值?
我问这个是因为如果你写这样的东西,因为首先,我无法将媒体文件夹上传到我的github存储库,因为我存储用户上传,默认文件总是同样,所以我想从静态提供默认值,但用户从媒体目录上传。
如果您使用此:
image = models.ImageField(upload_to=/upload/folder/, default=/img/default.jpg, blank=True, null=True)
它将尝试从媒体目录加载默认图像。
答案 0 :(得分:4)
首先,看看这两条路径:
/img/default.jpg - Absolute Path (starts with slash)
img/default.jpg - Relative Path (doesn't start with slash)
现在,如果您的默认路径为绝对,则Django不会将网址转换为/media/.../
。 Django只转换相对路径。
因此,如果您想从static
文件夹提供默认文件,您只需设置文件的绝对路径,例如 - /static/img/default.jpg
。
额外:
您甚至可以验证这一点。 Django使用urllib.parse.urljoin
来创建网址。试试这个:
>>> media_url = '/media/'
>>> abs_url = '/img/default.jpg' # absolute url
>>> rel_url = 'img/default.jpg' # relative url
>>> from urllib.parse import urljoin # in Python 2: from urlparse import urljoin
>>> urljoin(media_url, abs_url) # test with absolute url
'/img/default.jpg'
>>> urljoin(media_url, rel_url) # test with relative url
'/media/img/default.jpg'
答案 1 :(得分:0)
您可以将指向默认图像的方法定义为;
def upload_place_pics(instance, filename):
return "place_pics/{user}/{filename}".format(user=instance.user, filename=filename)
def default_place_pics():
return "place_pics/default_pic.jpg"
class Place(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=300)
image = models.ImageField(default=default_place_pics, upload_to=upload_place_pics, null=True)
有关如何配置静态文件的更多详细信息,请参见documentation