我正在使用 ImageField
来存储模型上的个人资料图片。
如果没有定义图片,我该如何设置它返回默认图片?
我正在使用 ImageField
来存储模型上的个人资料图片。
如果没有定义图片,我该如何设置它返回默认图片?
我没有尝试过这个方法,但我相对确定你可以把它设置为你的字段的默认值。
pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')
编辑:愚蠢的StackOverflow不允许我评论别人的答案,但那个旧片段不是你想要的。我强烈推荐django-imagekit,因为它可以非常轻松和干净地进行大量图像缩放和操作。
在models.py中
image = models.ImageField(upload_to='profile_pic', default='default.jpg')
在settings.py文件中添加以下内容:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
现在,手动将名为"default"的图像添加到媒体文件夹中。
urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
添加到您的项目的 config/urls.py 文件中。 - Alexander P理论上您也可以在模型定义中使用一个函数。但是我不知道这是否是良好的实践:
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进行缩略图生成。
ImageField
类,在图像值为None时返回一个默认的URL。 - Jordan Reiterfield = models.ImageField(upload_to='xyz',default='default.jpg')
{% ifequal object.image None %}
<img src="DEFAULT_IMAGE" />
{% else %}
display image
{% endifequal %}
您可以使用“default”参数提供初始值。 如果已经有一张图片并且您想将其设置为默认值(而不是删除它),您可以尝试类似于以下内容的操作:
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()
。