web-dev-qa-db-fra.com

Qu'est-ce qu'une "limace" dans Django?

Quand je lis le code Django, je vois souvent dans les modèles ce qu'on appelle un "slug". Je ne sais pas trop ce que c'est, mais je sais que cela a quelque chose à voir avec les URL. Comment et quand cette limace est-elle censée être utilisée?

(J'ai lu sa définition dans ce glossaire .)

516
Jonas

C'est un moyen de générer une URL valide, en utilisant généralement les données déjà obtenues. Par exemple, utiliser le titre d'un article pour générer une URL. Je conseillerais de générer le slug, en utilisant une fonction, à partir d'un titre (ou d'une autre donnée), plutôt que de le définir manuellement.

Un exemple:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>

Supposons maintenant que nous avons un modèle Django tel que:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)

Comment feriez-vous référence à cet objet avec une URL, avec un nom significatif? Vous pouvez utiliser Article.id pour que l'URL ressemble à ceci:

www.example.com/article/23

Ou, vous pouvez référencer le titre comme suit:

www.example.com/article/The 46 Year Old Virgin

Le problème est que les espaces ne sont pas valides dans les URL, ils doivent être remplacés par %20 qui est laid, ce qui rend ce qui suit:

www.example.com/article/The%2046%20Year%20Old%20Virgin

Cela ne résout pas notre URL significative. Ne serait-ce pas mieux:

www.example.com/article/the-46-year-old-virgin

C'est une limace. the-46-year-old-virgin. Toutes les lettres sont réduites et les espaces sont remplacés par des tirets -. Voir l'URL de cette page Web même pour un exemple!

660
Josh Smeaton

Si je peux fournir un contexte historique:

Le terme "slug" se rapporte à la fonte du métal - ici du plomb - à partir de laquelle les fontes de presse ont été faites. Chaque papier a ensuite régulièrement refondu et réusiné son usine de polices de caractères, car après de nombreuses impressions, elles sont devenues usées. Les apprentis comme moi ont commencé leur carrière là-bas et sont allés jusqu'au sommet (plus maintenant).

Les typographes devaient composer le texte d'un article de manière rétrograde avec des caractères principaux empilés de manière judicieuse. Donc, au moment de l’impression, les lettres seraient directement sur le papier. Tous les typographes pouvaient lire le journal en miroir aussi rapidement que celui imprimé. Par conséquent, les limaces (comme les escargots) ainsi que les histoires lentes (les dernières à être corrigées) attendaient sur le banc, uniquement identifiées par leurs lettres de poing, la plupart du temps généralement plus lisibles. Certaines nouvelles "chaudes" attendaient sur le banc, pour une éventuelle correction de dernière minute (journal du soir) avant la dernière assemblée et une impression définitive.

Django a émergé des bureaux du journal Lawrence au Kansas. Où probablement un certain jargon d'impression persiste. Passionné de Django - & - sympathique-vieux-limace-garçon-de-France.

112
MikkaH Savva

Comme un peu d'histoire, le terme "slug" vient du monde de l'édition de journaux.

C'est le nom informel donné à une histoire au cours du processus de production. Alors que l'histoire suit son chemin tortueux, du journaliste battu au rédacteur en chef, en passant par les "presses à imprimer", c'est le nom qui lui est référé, par exemple, "Avez-vous corrigé ces erreurs dans l'histoire" russia-cuts-europe-gas "? ? ".

Django l'utilise comme partie de l'URL pour localiser l'histoire, par exemple www.mysite.com/archives/russia-cuts-europe-gas.

55
paxdiablo

De ici .

"Slug" est un terme de journal, mais ce que cela signifie ici est le dernier bit de l'URL. Par exemple, un article intitulé "Un peu de Django" deviendrait automatiquement "peu après Django" (vous pouvez bien sûr le changer facilement si vous n’aimez pas le slug généré automatiquement).

23
BobbyShaftoe

Slug est un terme de journal. Un slug est une étiquette courte désignant quelque chose, contenant uniquement des lettres, des chiffres, des traits de soulignement ou des traits d'union. Ils sont généralement utilisés dans les URL (comme dans Django docs).

Un champ slug dans Django est utilisé pour stocker et générer des RL valides pour vos pages Web créées dynamiquement.

Tout comme la façon dont vous avez ajouté cette question à Stack Overflow et une page dynamique est générée. Lorsque vous voyez dans la barre d’adresses, le titre de votre question apparaît avec un "-" à la place des espaces. C'est exactement le travail d'un terrain de limaces.

Enter image description here

Le titre que vous avez entré ressemblait à ceci:> Qu'est-ce qu'une "limace" dans Django?

Et

En le stockant dans un slug, il en résulte le résultat dans ce qui est un slug-in-Django (voir l'URL de cette page)

21
Manjit Kumar

C’est une partie descriptive de l’URL destinée à la rendre plus descriptive, mais sans que le serveur Web n’exige forcément - in Qu'est-ce qu'un "slug" dans Django? le slug est 'in Django-what-is-a-slug ', mais le slug n'est pas utilisé pour déterminer le page servie (au moins sur ce site)

17
Cebjyre

Slug est une étiquette courte adaptée aux URL pour un contenu spécifique. Il ne contient que des lettres, des chiffres, des caractères de soulignement ou des traits d'union. Les slugs sont généralement enregistrés avec le contenu respectif et transmis sous forme de chaîne d'URL.

Slug peut créer en utilisant SlugField

Ex:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

Si vous voulez utiliser title comme slug, Django a une fonction simple appelée slugify

from Django.template.defaultfilters import slugify

class Article(models.Model):
    title = models.CharField(max_length=100)

    def slug(self):
        return slugify(self.title)

S'il a besoin d'unicité, ajoutez unique=True dans le champ slug.

par exemple, à partir de l'exemple précédent:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

Êtes-vous paresseux pour faire le processus slug? ne vous inquiétez pas, ce plugin vous aidera. Django-autoslug

16
Simplans

Aussi slug auto à Django-admin. Ajouté à ModelAdmin:

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

Comme ici:

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

    prepopulated_fields = {'slug': ('title', )}
8
Alexey Kuzmin

slug

Une courte étiquette pour quelque chose, contenant uniquement des lettres, des chiffres, des traits de soulignement ou des traits d'union. Ils sont généralement utilisés dans les URL. Par exemple, dans une URL d'entrée de blog typique:

https://www.djangoproject.com/weblog/2008/apr/12/spring/ le dernier bit (ressort) est la limace.

3
Sonia Rani