ImageField

1. Install required packages

1-1. ImageField

  • To use simple ImageField, pillow package is absolutely required.

pip install pillow

1-2. resizing

  • For resizing, pilkit and django-imagekit packages are required.

pip install pilkit django-imagekit

2. Define image column in model

posts > models.py

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    image = models.ImageField(blank=True)
    # Not saved in DB, cropped and displayed when called
    image_thumbnail = ImageSpecField(source='image',
                                      processors=[ResizeToFill(300, 300)],
                                      format='JPEG',
                                      options={'quality': 60})
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    # Like functionality
    like_users = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                    related_name='like_posts')

3. Add request.FILES to view

posts > views.py

4. Modify settings.py

5. Add path to urls.py

6. Modify Templates

forms.html

detail.html

migrations

django-imagekit library

Crop images internally to fit thumbnails

Download & usage

https://github.com/matthewwithanm/django-imagekitarrow-up-right

Installation

Crop and save the original itself

Last updated