Default image for ImageField in Django's ORM

后端 未结 6 1726
夕颜
夕颜 2020-12-03 01:22

I\'m using an ImageField to store profile pictures on my model.

How do I set it to return a default image if no image is defined?

相关标签:
6条回答
  • 2020-12-03 01:23

    You could theoretically also use a function within your model definition. But I dont know whether this is good practice:

    class Image(model.Models):
        image = ....
    
        def getImage(self):
            if not self.image:
                # depending on your template
                return default_path or default_image_object
    

    and then within a template

       <img src="img.getImage" />
    

    This gives you a great deal of flexibility for the future...

    I'm using sorl for thumbnails generation with great success

    0 讨论(0)
  • 2020-12-03 01:24

    You can provide an initial value with the 'default' parameter. If there is already an image and you want to set it to default (instead of deleting it), you can try something like this:

    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()
    

    Then you can use set_image_to_default() instead of image.delete(), if you prefer the default.

    0 讨论(0)
  • 2020-12-03 01:27

    I haven't tried this, but I'm relatively sure you can just set it as a default in your field.

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

    EDIT: Stupid StackOverflow won't let me comment on other people's answers, but that old snippet is not what you want. I highly recommend django-imagekit because it does tons of great image resizing and manipulation stuff very easily and cleanly.

    0 讨论(0)
  • 2020-12-03 01:33

    you could try this in your view:

    {% ifequal object.image None %}
        <img src="DEFAULT_IMAGE" />
    {% else %}
        display image
    {% endifequal %}
    
    0 讨论(0)
  • 2020-12-03 01:36

    In your image field

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

    Note : path should be inside MEDIA_ROOT.

    0 讨论(0)
  • 2020-12-03 01:47

    In models.py

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

    In settings.py add this:

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

    Now, Manually, add an image with a name ''default' into the media folder.

    0 讨论(0)
提交回复
热议问题