J’ai déjà fait, il y en fait 11 mois, un billet de la django app du mois sur une app de tag, django-tagging. Lorsque je l’ai testé, django-tagging était à la version 0.3. Aujourd’hui, elle est version 0.3.1. Et les derniers commit remonte à janvier 2010 ( ce sont ceux ayant aboutis à la version 0.3.1)
Je me suis donc dit, qu’il était peut-être tant de revenir sur le sujet et de présenter une autre app django, sur le même sujet, qui même si pour l’instant présente quelques lacunes comparée à django-tagging, me semble prometteuse.
Et cette app, c’est, roulement de tambour…., django-taggit d’Alex Gaynor (un trublion bien connu pour ceux qui font du django)
1- Où on le trouve, comment on l’installe, tout ça quoi (et la doc) ?
Alors on le trouve tout simplement sur sa page Pypi ou sur sa page github d’ailleurs
Pour l’installation rien de plus simple :
- un easy_install ou un pip
- un git clone
Pour la doc, là il n’y a vraiment rien à redire, le projet offre une doc très bien fournie sur readthedocs.org.
2- Mais au fait, à quoi ça sert ?
Tout simplement à taguer des objets. Exactement comme django-tagging donc. Vous allez pouvoir taguer vos objets, filtrer les objets en fonction des tags qu’ils ont ou trouver des objets similaires de par leur tag.
Vous allez aussi pouvoir modifier légèrement la mécanique interne. Par exemple si utiliser des generics key ne vous plait pas, tout est prévu pour que vous puissiez simplement les remplacer par des foreign key. Vous pourrez aussi changer d’autre mécanismes comme le model utilisé pour sauver les Tags.
3- Comment ça marche ?
Tout d’abord il faudra que vous ajoutiez, pour chaque models que vous voulez rendre ‘tagable’ un manager de tag. (Pour ceux qui se souviennent django-tagging permet de taguer directement des instances de models, sans modifier la classe Model en question).
Ca peut paraître un peu lourd et ça rend l’app assz intrusive, mais bon, c’est comme ça. Et puis du coup ça permet, il faut bien l’avouer d’avoir une écriture plus fluide et plus ramassé de son code. Nul besoin de toujours passer par la classe Tag en filtrant sur l’objet dont l’on veut récupérer les tags. Un simple object.tags suffit pour avoir tout ses tags.
Facilité d’utilisation ou intrusivité, à vous de choisir, django-taggit, lui à choisit. (Et bon, au pire, un bon petit contribute_to_model devrait permettre une extensibilité moins intrusive).
Pour ajouter les tags, les syntaxes possible sont à peu près les mêmes que celle de django-tagging, à savoir (l’image est une capture d’écran d’une partie de la doc) :
Un truc à ne pas oublier, django-taggit utilise des many to many. Donc, n’oubliez pas le save_m2m si vous utilisez des forms.
Ensuite, vous pourrez bien entendu supprimer des tags, les lister, filtrer des objets en fonction de leur tags ou avoir une liste des objets similaires. C’est une vrai liste qui est classée par ordre de similarités.
4- Une app peut en cacher deux autres.
Là, à cette instant de votre lecture vous vous dites peut-être ‘Mais mer..mince alors, il manque des trucs comparés à django-tagging, il n’y a même pas de templates tags d’affichage’.
Et vous auriez raison. Sauf que, sauf que… Il y a des applications qui étendent django-taggit à savoir :
- django-taggit-suggest qui permet d’ajouter des fonctionnalités de suggestion de tags
- django-taggit-templatetags qui offre différents templatetags d’affichage des tags, dont un par cloud.
5- Au final
Vu le statut de quasi moribond de django-tagging comparé à la vigueur actuelle de django-taggit, je pense vraiment que si vous avez besoin d’une application qui gére les tags, django-taggit est un meilleur choix. Et puis, je trouve ça rassurant qu’il y ait des applications externes pour étendre django-taggit.
One Response to “Django-taggit, le tag est mort, vive le tag ..”
Sorry, the comment form is closed at this time.
Salut,
Je découvre Django et python en même temps, et je m’y suis mis tout récemment. J’ai eu 2 années d’expérience avec Drupal (et je compte continuer), et je pressens que les performances qu’on peut obtenir presque à froid (et la facilité à coder) avec Django sont bien au-dessus de ce que je peux obtenir avec Drupal (j’aime pas particulièrement PHP).
Et j’étais tombé hier sur cet article sans trop comprendre comment django-taggit fonctionne. Mais en fait, c’est vraiment balèze. Le fait de pouvoir changer le truc pour utiliser des clés étrangères (système comparable à mes habitudes Drupal)…
Je crois vraiment que j’ai fait un choix qui me correspond en ayant choisi Django/python. J’ai encore beaucoup à apprendre…