Dans Technique par Florian Strzelecki - 13:59 - 26.02.2010
Depuis quelques jours je cherche une application (ou une base pour une application django) permettant de gérer les vignettes de mes images, avec des contraintes de réutilisabilité et surtout, d'intégration dans un environnement déjà existant.
On trouve un peu de tout sur internet, il y a d'ailleurs une liste d'application Django de gestion d'images, que j'ai donc consultée.
J'en ai aussi discuté un peu sur le chan #django-fr d'IRC, pour voir ce que les gens en pensait : manifestement, je ne suis pas le seul à me poser ce genre de questions.
En tout cas, sorl-thumbnail n'est pas ce que je cherche exactement, mais c'est une bonne application, que je souhaite donc vous présenter rapidement.
Très peu de dépendances à résoudre, surtout si on utilise déjà Django :
L'installation se fait, après avoir téléchargé les sources, de la manière habituelle :
$ sudo python setup.py install
Pour l'utiliser dans son application Django, ne reste plus qu'à l'ajouter à ses INSTALLED_APPS :
INSTALLED_APPS = (
...
'sorl.thumbnail',
)
C'est à peu près tout pour cette partie là, qui permet d'utiliser trois éléments de sorl-thumbnail : les champs ThumbnailField et ImageWithThumbnailsField, et le templatetag {% thumbnail %}.
L'utilisation la plus simple (mais aussi la plus limitée) consiste à utiliser le templatetags thumbnail : il permet de générer une vignette à partir d'une image et des paramètres de taille (par exemple 50x80, 200x ou x300).
A chaque fois qu'un rendu du template est effectué, le templatetags vérifie l'existence de la vignette, et la créera s'il ne la trouve pas, puis il retournera les informations demandées.
Petit côté pratique, il permet aussi d'assigner un objet de la classe DjangoThumbnail au template, en utilisant "as [variable]" à la suite des options.
De plus, il existe une liste d'option disponible dans la documentation de sorl-thumbnail.
Les avantages sont surtout dans la simplicité et la souplesse :
Quant aux limitations, elles résident principalement dans la génération des vignettes au moment du rendu du template :
Une autre façon d'utiliser sorl-thumbnail avec Django est d'utiliser les champs proposés pour vos modèles django.
ThumbnailField retaille l'image source avant de la sauvegarder.ImageWithThumbnailsField garde l'image source originale mais propose une interface pratique pour accéder à des vignettes prédéfinies.Autant je vois peu l'intérêt du ThumbnailField qui fait perdre l'image source, autant ImageWithThumbnailsField me semble beaucoup plus intéressant.
Cette fois-ci, il faut définir directement les tailles de vignettes dans le modèle, à l'aide de l'option thumbnail. Puis dans le template de l'utiliser comme ceci :
{{ my_instance.img_th_field.thumbnail }}
Une possibilité supplémentaire très agréable est de définir plusieurs tailles de vignette comme indiqué dans la documentation : Multiple Thumbnails.
On accède alors aux vignettes de cette façon (avec une taille nommée "large") :
{{ my_instance.img_th_field.extra_thumbnail.large }}
La petite cerise sur le gâteau restant l'option generate_on_save, qui permet de faire générer les vignettes au moment de la sauvegarde de l'image originale.
Je ne vais pas décrire toutes les fonctionnalités intéressantes, mais on notera quand même les suivantes :
Dans l'ensemble, il s'agit d'une bonne application, mais il y a des limitations qui peuvent sembler rhédibitoires si on souhaite l'utiliser sur un gros projet.
Pour moi, c'est la non-utilisation du système de storage de Django. En réalité, il serait tout à fait possible d'étendre les classes de base de sorl-thumbnail (ne contenant rien de spécifique à Django) pour l'adapter à son projet. Ce n'est donc pas complètement rédhibitoire, mais cela demande une adaptation et du développement, ce qui peut être un frein.
Dans la théorie, les thumbnail processors devraient permettre de déposer les vignettes ailleurs que sur le système local, et d'apporter n'importe quel traitement de son choix, et donc d'améliorer la scalability de son application.
Dans tous les cas, pour un blog personnel ou un site corporate sans d'énormes besoins sur les fichiers images, cette application s'intègrera parfaitement dans votre projet.
Et merci à daks sur #django-fr pour la discussion à propos des galeries d'images.
Du coup, comme je n'ai pas trouvé ce que je cherchais, et bien je cherche encore, et je vais peut-être me lancer dans une application fait maison. J'en parlerai donc quand ce sera en route sérieusement !
Poster un commentaire
Haut de page