Django : les slugs

In: Django

25 juin 2009

Quelque soit le langage, un élément est toujours délicat à traiter : créer des url cool, avec des vrais mots.
Mais en ne plaçant pas de caractères qui vont rendre l’url toute pas jolie avec des %20 et autres.

Pour cela, il faut supprimer tous les accents (et les remplacer par leur lettre sans accent); supprimer les espaces (et les remplacer par des -) et supprimer les signes de ponctuation (et ne pas les remplacer).

Avec Django, pas besoin de s’embêter avec ça :)
Il y a les slugs.
Par principe, un slug contiendra toujours une valeur qu’il est possible de mettre en url et sera toujours unique.
A vous par la suite de l’utiliser pour créer l’url de vos objets.

Mais il faut encore le définir correctement :)
Pour cela, dans votre administration, nous allons placer un prepopulated_field.
Placez dans vos fieldsets le titre de l’uplet et son slug.

Puis placez le code suivant en dessous de la définition des fieldsets :

prepopulated_fields = {'slug': ('title',)}

Ou slug est le nom du champ « slug » (je vous conseille de l’appeller slug).
Et ou title est le nom de votre champ de titre.

Chargez votre administration, remplissez votre titre et admirez votre champ de slug se remplir tout seul :)
Vous constaterez également qu’il ne se remplit que lors de la première édition, pour éviter un changement d’url inopportun lorsque vous changez le titre de la page.
Rien ne vous empêche par ailleurs de placer le slug de votre choix.

Vous pouvez par ailleurs personnaliser la chose dans votre application.
Par exemple dans un template, pour afficher la valeur d’un string slugifié :

{{ "mon Test"|slugify }}

Affichera : mon-test

Et dans vos fichiers .py directement également

from django.template import defaultfilters
slug = defaultfilters.slugify("Mon Test")

la variable slug contiendra alors mon-test.

Et vous pouvez faire de belles URLs. N’oubliez pas d’utiliser les vues génériques pour trouver le contenu qui correspond à un slug et le charger :)

Cet article est rédigé par Damien MATHIEU.
Et est disponible sous licence creative common by-nc-nd.
Si vous appréciez son contenu, n'hésitez pas à me recommander.

6 Responses to Django : les slugs

Avatar

QNux

juin 25th, 2009 at 21:59

Merci pour cette astuce !

Ads

Avatar

loïc m.

juin 25th, 2009 at 23:54

tien, ça me rappel comme un air de symfony tout ça :)

Avatar

Damien

juin 26th, 2009 at 0:19

Oui. Sauf que c’est pas Django qui a repris l’idée sur Symfony mais plutôt le contraire hein ;)

Avatar

Palleas

juin 26th, 2009 at 8:11

Ah c’est marrant, moi je croyais que le framework de routing de Sf s’était inspiré de ROR, on m’aurait menti ? :o

Avatar

Damien

juin 26th, 2009 at 9:35

D’ou t’a vu que c’est du routing ? On transforme des chaines de caractères pour les mettre dans l’url. Mais on route rien la hein :)

Rails ne contient, de base, rien pour faire ce genre de choses. Il faut utiliser un plugin.
Permalink Fu par exemple : http://github.com/technoweenie/permalink_fu/tree/master

Avatar

Palleas

juin 27th, 2009 at 9:43

Ah oué j’ai extrapolé un peu vite, pardon! :D

Comment Form

  • brice: Et oui une page se tourne, ça fait bizarre vu que je t'ai toujours connu à la source. Bonne co [...]
  • Florent V.: Bonne continuation et tout. Mais on te le redira pour ton pot de départ, avec deux verres dans le n [...]
  • Damien: @Ishiro les articles proviennent de problèmes rencontrés en développant. Ne faisant plus de Djan [...]
  • thoas: Ravis que tu aies trouvé un poste où tu pourras développer d'avantage tes compétences Ruby/Rails [...]
  • azerttyu: Bonne chance à toi. Découvrir un nouvel univers professionnel et pouvoir s'éclater dans son do [...]