44

我正在使用ImageField 在我的模型上存储个人资料图片。

如果未定义图像,如何将其设置为返回默认图像?

4

6 回答 6

46

我还没有尝试过,但我相对确定你可以在你的领域将它设置为默认值。

pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')

编辑:愚蠢的 StackOverflow 不会让我评论其他人的答案,但那个旧片段不是你想要的。我强烈推荐django-imagekit,因为它可以非常轻松、干净地完成大量出色的图像大小调整和操作。

于 2009-08-14T09:26:47.333 回答
18

在模型.py

image = models.ImageField(upload_to='profile_pic', default='default.jpg')

在 settings.py 中添加:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

现在,手动将名称为“默认”的图像添加到媒体文件夹中。

于 2019-02-13T04:54:03.500 回答
11

理论上,您也可以在模型定义中使用函数。但我不知道这是否是好习惯:

class Image(model.Models):
    image = ....

    def getImage(self):
        if not self.image:
            # depending on your template
            return default_path or default_image_object

然后在模板中

   <img src="img.getImage" />

这为您的未来提供了很大的灵活性......

我正在使用 sorl 生成缩略图并取得了巨大成功

于 2009-08-14T13:41:02.013 回答
7

在您的图像字段中

field = models.ImageField(upload_to='xyz',default='default.jpg')

注意:路径应该在 MEDIA_ROOT 内。

于 2018-01-31T19:13:51.447 回答
3

你可以在你的模板中试试这个:

{% ifequal object.image None %}
    <img src="DEFAULT_IMAGE" />
{% else %}
    display image
{% endifequal %}
于 2009-08-14T09:23:59.680 回答
0

您可以使用“默认”参数提供初始值。如果已经有图像并且您想将其设置为默认值(而不是删除它),您可以尝试以下操作:

DEFAULT = 'img/default.jpg'

class Example(models.Model):
    image = models.ImageField(default=DEFAULT)

    def set_image_to_default(self):
        self.image.delete(save=False)  # delete old image file
        self.image = DEFAULT
        self.save()

然后,如果您更喜欢默认值,则可以使用set_image_to_default()代替。image.delete()

于 2017-07-12T14:02:55.473 回答