Thumbnails for Django.
- Support for Django 1.8, 1.9, 1.10, following the Django supported versions policy
- Python 3 support
- Storage support
- Pluggable Engine support for Pillow, ImageMagick, PIL, Wand, pgmagick, and vipsthumbnail
- Pluggable Key Value Store support (cached db, redis, and dynamodb by AWS)
- Pluggable Backend support
- Admin integration with possibility to delete
- Dummy generation (placeholders)
- Flexible, simple syntax, generates no html
- ImageField for model that deletes thumbnails
- CSS style cropping options
- Back smart cropping, and remove borders from the images when cropping
- Margin calculation for vertical positioning
- Alternative resolutions versions of a thumbnail
Read more in the documentation (latest version)
Feel free to create a new Pull request if you want to propose a new feature. If you need development support or want to discuss with other developers join us in the channel #sorl-thumnbnail at freenode.net or Gitter.
For releases updates and more in deep development discussion use our mailing list in Google Groups.
- IRC Channel: irc://irc.freenode.net/#sorl-thumbnail
- Gitter: https://gitter.im/mariocesar/sorl-thumbnail
- Mailing List: [email protected] https://groups.google.com/d/forum/sorl-thumbnail
The tests should run with tox and pytest. Running tox will run all tests for all environments. However, it is possible to run a certain environment with tox -e <env>, a list of all environments can be found with tox -l. These tests require the dependencies of the different engines defined in the documentation. It is possible to install these dependencies into a vagrant image with the Vagrantfile in the repo.
If you need help using sorl-thumbnail browse http://stackoverflow.com/questions/tagged/sorl-thumbnail and posts your questions with the sorl-thumbnail tag.
Getting the code for the latest stable release use 'pip'.
$ pip install sorl-thumbnail
Then register 'sorl.thumbnail', in the 'INSTALLED_APPS' section of your project's settings.
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.admin', 'django.contrib.sites', 'django.contrib.comments', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.contenttypes', 'sorl.thumbnail', )
All of the examples assume that you first load the thumbnail template tag in your template.:
{% load thumbnail %}
A simple usage.
{% thumbnail item.image "100x100" crop="center" as im %} <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"> {% endthumbnail %}
See more examples in the section Template examples in the Documentation
Using the ImageField that automatically deletes references to itself in the key value store and its thumbnail references and the thumbnail files when deleted.:
from django.db import models from sorl.thumbnail import ImageField class Item(models.Model): image = ImageField(upload_to='whatever')
See more examples in the section Model examples in the Documentation
You can use the 'get_thumbnail':
from sorl.thumbnail import get_thumbnail from sorl.thumbnail import delete im = get_thumbnail(my_file, '100x100', crop='center', quality=99) delete(my_file)
See more examples in the section Low level API examples in the Documentation
Possible related to the implementation of your Amazon S3 Backend, see the issue #351 due the storage backend reviews if there is an existing thumbnail when tries to generate the thumbnail that makes an extensive use of the S3 API
A fast workaround if you are not willing to tweak your storage backend is to set:
THUMBNAIL_FORCE_OVERWRITE = True
So it will avoid to overly query the S3 API.