django-dummy-thumbnails¶
Dummy thumbnails for most popular Django thumbnail generators.
There are times when you have a database of a Django site and you need to quickly start it up to fix/develop, but then you realise that images are missing and you need to have images, because either your layout is broken or, in the worst case, entire site is broken (500). This library has been written for developers in order to avoid above mentioned problems in the shortest way possible, with least efforts possible.
Prerequisites¶
- Django 1.8, 1.9, 1.10
- Python 2.7, 3.4, 3.5
Although django-dummy-thumbnails is not being tested against older versions of Django, tests do pass with Django versions 1.5, 1.6 and 1.7.
Installation¶
Install in your virtual environment
Latest stable version from PyPI:
pip install django-dummy-thumbnails
Latest stable version from GitHub:
pip install https://github.com/barseghyanartur/django-dummy-thumbnails/archive/stable.tar.gz
Add
dummy_thumbnails
to yourINSTALLED_APPS
in the globalsettings.py
.INSTALLED_APPS = ( # ... 'dummy_thumbnails', # ... )
Specify a custom path to your images directory:
DUMMY_THUMBNAILS_IMAGES_PATH = '/home/path/to/images/'
This should be a directory inside your media directory of your Django project. Otherwise Django would raise a
SuspiciousOperation
exception. In order not to duplicate tons of files for each project, you are advised to create symlinks to the images directory in the media directory of your Django project.ln -s /home/path/to/images /home/repos/your-django-project/media
If you prefer to use included public domain images, run the following management commands:
./manage.py collectstatic --noinput ./manage.py dummy_thumbnails_symlink_dummy_images
And specify the following path:
DUMMY_THUMBNAILS_IMAGES_PATH = os.path.join(MEDIA_ROOT, 'mixed')
Usage¶
Common usage examples.
Replace broken images with dummy ones¶
That’s what it’s all about - replacing the broken images with dummy ones.
Note
You should never use this in production. All the changes mentioned above and below are supposed to be applied to development settings only.
Supported thumbnailers¶
Most popular image thumbnailers for Django (django-imagekit, sorl-thumbnail and easy-thumbnails) are supported. If you can’t find your favourite thumbnailer, open an issue or consider making a pull request.
django-imagekit¶
Integration with django-imagekit.
Modify your settings in the following way:
Add
imagekit
,dummy_thumbnails
anddummy_thumbnails.contrib.thumbnailers.django_imagekit.generatorlibrary
to theINSTALLED_APPS
:INSTALLED_APPS = [ # ... 'imagekit', 'dummy_thumbnails', 'dummy_thumbnails.contrib.thumbnailers.django_imagekit.generatorlibrary', # ... ]
If you are using the included public domain images, don’t forget to collect the static files and create a symlink:
./manage.py collectstatic --noinput ./manage.py dummy_thumbnails_symlink_dummy_images
Now the following would work:
{% load imagekit %} {% thumbnail '640x480' 'None1' %} {% thumbnail '480x640' 'None2' %} {% thumbnail '200x200' 'None3' %}
sorl-thumbnail¶
Integration with sorl-thumbnail.
Modify your settings in the following way:
Add
sorl.thumbnail
anddummy_thumbnails
to theINSTALLED_APPS
:INSTALLED_APPS = [ # ... 'sorl.thumbnail', 'dummy_thumbnails', # ... ]
Set the dummy thumbnail engine as
THUMBNAIL_ENGINE
:THUMBNAIL_ENGINE = 'dummy_thumbnails.contrib.sorl_thumbnail.engines.DummyThumbnailsEngine'
If you are using the included public domain images, don’t forget to collect the static files and create a symlink:
./manage.py collectstatic --noinput ./manage.py dummy_thumbnails_symlink_dummy_images
Now the following would work:
{% load thumbnail %} {% thumbnail 'None1' "640x480" crop="center" as im %} <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" /> {% endthumbnail %} {% thumbnail 'None2' "480x640" crop="center" as im %} <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" /> {% endthumbnail %} {% thumbnail 'None3' "200x200" crop="center" as im %} <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" /> {% endthumbnail %}
easy-thumbnails¶
Integration with easy-thumbnails.
Modify your settings in the following way:
Add
easy_thumbnails
anddummy_thumbnails
to theINSTALLED_APPS
:INSTALLED_APPS = [ # ... 'easy_thumbnails', 'dummy_thumbnails', # ... ]
Add dummy thumbnail generator to
THUMBNAIL_SOURCE_GENERATORS
:THUMBNAIL_SOURCE_GENERATORS = ( 'dummy_thumbnails.contrib.thumbnailers.easy_thumbnails.source_generators.dummy_thumbnail', )
If you are using the included public domain images, don’t forget to collect the static files and create a symlink:
./manage.py collectstatic --noinput ./manage.py dummy_thumbnails_symlink_dummy_images
Now the following would work:
{% load thumbnail %} <img src="{% thumbnail 'None1' 640x480 crop %}" alt="" /> <img src="{% thumbnail 'None2' 480x640 crop %}" alt="" /> <img src="{% thumbnail 'None3' 200x200 crop %}" alt="" />
Dealing with broken or invalid dummy images¶
Of course, it’s always better to have a good working set of dummy images. However, it might happen that for some reason one of your dummy images is broken.
The recommended approach is to use a management command
dummy_thumbnails_verify_dummy_images
, which has been written in order to
verify the dummy images and identify possible problems. It also lets you
remove broken/invalid dummy images.
To remove broken/invalid dummy images with confirmation, type:
./manage.py dummy_thumbnails_verify_dummy_images
To remove broken/invalid dummy images without confirmation, type:
./manage.py dummy_thumbnails_verify_dummy_images --noinput
To just list broken/invalid dummy images without removal, type:
./manage.py dummy_thumbnails_verify_dummy_images --list
Another way to avoid failures is to set the value of
DUMMY_THUMBNAILS_VERIFY_IMAGES
to True in your project settings. Beware,
that this slows down the start up time of your Django project, although does
not slow down further rendering of the images.
Demo¶
Run demo locally¶
In order to be able to quickly evaluate the django-dummy-thumbnails, a demo app (with a quick installer) has been created (works on Ubuntu/Debian, may work on other Linux systems as well, although not guaranteed). Follow the instructions below to have the demo running within a minute.
Grab the latest dummy_thumbnails_demo_installer.sh
:
wget -O - https://raw.github.com/barseghyanartur/django-dummy-thumbnails/stable/examples/dummy_thumbnails_demo_installer.sh | bash
Open your browser and test the app.
If quick installer doesn’t work for you, see the manual steps on running the example project.
Testing¶
Simply type:
./runtests.py
or use tox:
tox
or use tox to check specific env:
tox -e py35
or run Django tests:
./manage.py test dummy_thumbnails --settings=settings.testing
Author¶
Artur Barseghyan <artur.barseghyan@gmail.com>
Documentation¶
Contents:
Table of Contents
- dummy_thumbnails package
- Subpackages
- dummy_thumbnails.contrib package
- Subpackages
- dummy_thumbnails.contrib.image_importers package
- dummy_thumbnails.contrib.thumbnailers package
- Module contents
- Subpackages
- dummy_thumbnails.management package
- dummy_thumbnails.tests package
- dummy_thumbnails.contrib package
- Submodules
- dummy_thumbnails.apps module
- dummy_thumbnails.base module
- dummy_thumbnails.conf module
- dummy_thumbnails.defaults module
- dummy_thumbnails.helpers module
- dummy_thumbnails.settings module
- Module contents
- Subpackages