【发布时间】:2010-11-19 14:22:12
【问题描述】:
我正在使用ImageField 在我的模型上存储个人资料图片。
如果没有定义图像,如何设置它以返回默认图像?
【问题讨论】:
标签: django django-orm
我正在使用ImageField 在我的模型上存储个人资料图片。
如果没有定义图像,如何设置它以返回默认图像?
【问题讨论】:
标签: django django-orm
我还没有尝试过,但我比较确定你可以在你的领域中将它设置为默认值。
pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')
编辑:愚蠢的 StackOverflow 不允许我评论其他人的答案,但旧的 sn-p 不是你想要的。我强烈推荐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/'
现在, 手动将名称为“默认”的图像添加到媒体文件夹中。
【讨论】:
urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 添加到项目的 config/urls.py
理论上,您也可以在模型定义中使用函数。但我不知道这是否是好的做法:
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。
在您的图像字段中
field = models.ImageField(upload_to='xyz',default='default.jpg')
注意:路径应在 MEDIA_ROOT 内。
【讨论】:
你可以在你的模板中试试这个:
{% ifequal object.image None %}
<img src="DEFAULT_IMAGE" />
{% else %}
display image
{% endifequal %}
【讨论】:
您可以使用“默认”参数提供初始值。 如果已经有一个图像并且您想将其设置为默认值(而不是删除它),您可以尝试这样的操作:
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()。
【讨论】: