Was ist eine "Schnecke" in Django?


589

Wenn ich Django-Code lese, sehe ich in Modellen oft, was als "Schnecke" bezeichnet wird. Ich bin mir nicht ganz sicher, was das ist, aber ich weiß, dass es etwas mit URLs zu tun hat. Wie und wann soll dieses Schneckending verwendet werden?

(Ich habe die Definition in diesem Glossar gelesen .)

Antworten:


752

Ein "Slug" ist eine Möglichkeit, eine gültige URL zu generieren, wobei im Allgemeinen bereits erhaltene Daten verwendet werden. Beispielsweise verwendet ein Slug den Titel eines Artikels, um eine URL zu generieren. Ich empfehle, den Slug mithilfe einer Funktion zu generieren, die den Titel (oder ein anderes Datenelement) enthält, anstatt ihn manuell festzulegen.

Ein Beispiel:

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

Stellen wir uns nun vor, wir hätten ein Django-Modell wie:

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

Wie würden Sie dieses Objekt mit einer URL und einem aussagekräftigen Namen referenzieren? Sie könnten beispielsweise Article.id verwenden, damit die URL folgendermaßen aussieht:

www.example.com/article/23

Oder Sie möchten den Titel folgendermaßen referenzieren:

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

Da Leerzeichen in URLs nicht gültig sind, müssen sie durch Folgendes ersetzt werden %20. Dies führt zu:

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

Beide Versuche führen nicht zu einer sehr aussagekräftigen, leicht lesbaren URL. Das ist besser:

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

In diesem Beispiel the-46-year-old-virginhandelt es sich um eine Schnecke: Sie wird aus dem Titel erstellt, indem alle Buchstaben in Großbuchstaben geschrieben und Leerzeichen durch Bindestriche ersetzt werden -.

Ein weiteres Beispiel finden Sie in der URL dieser Webseite.


72
Gute Beschreibung, aber um hinzuzufügen: SlugField gewährleistet keine sofortige Eindeutigkeit. Wenn Sie es also standardmäßig verwenden, ist dies eine bessere URL: www.example.com/article/the-40-year-old-virgin/23 / Wobei '23' die article.id ist und was tatsächlich für die Abfrage verwendet wird (auch schneller als das Abfragen auf dem Slug).
Daniel Naab

126
Ich finde www.example.com/article/23/the-40-year-old-virgin leichter zu lesen.
MiniQuark

16
Wenn Sie Inhalte basierend auf der ID bereitstellen, entscheiden Sie, ob Sie überprüfen möchten, ob der Slug mit dem Inhalt übereinstimmt (und geben Sie 404 zurück, wenn dies nicht der Fall ist), oder ignorieren Sie ihn vollständig. Ich glaube nicht, dass es eine allgemeine Regel für das Beste gibt, was SEO betrifft. SO zeigt diese Seite weiterhin an, wenn Sie stackoverflow.com/questions/427102/… in Ihren Browser eingeben .
Tomas Andrle

2
@ Daniel Denken Sie daran, dass ein Slug auch die reale Datenbank-ID verbirgt, sodass Ihr Beispiel einen Vorteil der Verwendung eines Slugs zunichte macht.
Eno

15
@Eno die Schnecke wird für SEO und für Permalink-Nizza hinzugefügt. Die ID wird für die indizierte Suche verwendet. Die SEO für Stackoverflow ist brillant - und sie verwenden genau diese Strategie. Ihr Argument war "Datenbank-ID ausblenden", das Sie jetzt bei "SEO" eingereicht haben. Was ist los?
Josh Smeaton

134

Wenn ich einen historischen Kontext angeben darf:

Der Begriff "Schnecke" hat mit dem Gießen von Metall - in diesem Fall Blei - zu tun, aus dem die Druckschriften hergestellt wurden. Jedes Papier hatte dann seine Schriftfabrik regelmäßig neu geschmolzen und in frischen Formen neu gegossen, da sie nach vielen Drucken abgenutzt waren. Auszubildende wie ich haben dort ihre Karriere begonnen und sind ganz nach oben gegangen (nicht mehr).

Typographen mussten den Text eines Artikels rückwärts verfassen, wobei die Hauptfiguren weise gestapelt waren. Zum Zeitpunkt des Drucks befinden sich die Buchstaben also direkt auf dem Papier. Alle Typografien konnten die gespiegelte Zeitung genauso schnell lesen wie die gedruckte. Daher warteten die Schnecken (wie Schnecken) und auch die langsamen Geschichten (die letzten, die repariert wurden) viele auf der Bank, die nur durch ihre Faustbuchstaben identifiziert wurden, wobei der gesamte Titel im Allgemeinen besser lesbar war. Dort warteten einige "heiße" Nachrichten auf der Bank auf eine mögliche Last-Minute-Korrektur (Abendpapier) vor der letzten Montage und dem endgültigen Druck.

Django kam aus den Büros des Lawrence-Journals in Kansas. Wo wahrscheinlich noch ein Druckjargon verweilt. A-Django-Enthusiast - & - freundlicher alter Schneckenjunge aus Frankreich.


61

Der Begriff "Schnecke" stammt aus der Welt der Zeitungsproduktion.

Es ist ein informeller Name, der einer Geschichte während des Produktionsprozesses gegeben wird. Während sich die Geschichte vom Beat-Reporter (vorausgesetzt, diese existieren überhaupt noch?) Über den Editor bis zu den "Druckmaschinen" schlängelt , ist dies der Name, auf den sie verweist, z. B. "Haben Sie diese Fehler in" behoben? Kate-and-William-Geschichte? ".

Einige Systeme (wie Django) verwenden den Slug als Teil der URL, um die Story zu lokalisieren. Ein Beispiel hierfür ist www.mysite.com/archives/kate-and-william.

Sogar Stack Overflow selbst tut dies mit dem GEB-ish (a) selbstreferenziell /programming/427102/what-is-a-slug-in-django/427201#427201, obwohl Sie den Slug durch ersetzen können blahblahund es immer noch in Ordnung ist.

Es kann sogar früher zurückgehen, da Drehbücher zu Beginn jeder Szene "Slug Lines" hatten, was im Grunde den Hintergrund für diese Szene festlegt (wo, wann und so weiter). Es ist insofern sehr ähnlich, als es eine Präzision oder Präambel dessen ist, was folgt.

Bei einer Linotype-Maschine war eine Schnecke ein einzeiliges Metallstück, das aus den einzelnen Buchstabenformen hergestellt wurde. Durch das Erstellen einer einzelnen Schnecke für die gesamte Linie wurde das alte Compositing von Zeichen zu Zeichen erheblich verbessert.

Obwohl das Folgende eine reine Vermutung ist, war eine frühe Bedeutung von Schnecke für eine gefälschte Münze (die irgendwie gedrückt werden müsste). Ich könnte mir vorstellen, dass diese Verwendung in den Druckbegriff umgewandelt wird (da der Butzen mit den Originalzeichen gedrückt werden musste) und von dort von der Definition des Stücks Metall zur Definition der Zusammenfassung der Geschichte wechselt. Von dort ist es ein kurzer Schritt vom richtigen Drucken zur Online-Welt.


(a) "Godel Escher, Bach" von einem Douglas Hofstadter , den ich (zumindest) als eines der großen modernen intellektuellen Werke betrachte. Sie sollten sich auch seine andere Arbeit "Metamagical Themas" ansehen.


29

Slug ist ein Zeitungsbegriff. Eine Schnecke ist eine kurze Bezeichnung für etwas, die nur Buchstaben, Zahlen, Unterstriche oder Bindestriche enthält. Sie werden im Allgemeinen in URLs verwendet. (wie in Django-Dokumenten)

Ein Slug-Feld in Django wird zum Speichern und Generieren gültiger URLs für Ihre dynamisch erstellten Webseiten verwendet.

Genau wie Sie diese Frage bei Stack Overflow hinzugefügt haben und eine dynamische Seite generiert wurde und wenn Sie in der Adressleiste sehen, sehen Sie Ihren Fragentitel mit "-" anstelle der Leerzeichen. Das ist genau die Aufgabe eines Schneckenfeldes.

Geben Sie hier die Bildbeschreibung ein

Der von Ihnen eingegebene Titel war ungefähr so ​​-> Was ist eine „Schnecke“ in Django?

Wenn es in einem Slug-Feld gespeichert wird, wird es zu "Was-ist-ein-Slug-in-Django" (siehe URL dieser Seite).


27

Von hier aus .

"Slug" ist ein Zeitungsbegriff, aber was es hier bedeutet, ist das letzte Stück der URL. Zum Beispiel würde ein Beitrag mit dem Titel "Ein bisschen über Django" automatisch zu "Ein bisschen über Django" (Sie können ihn natürlich leicht ändern, wenn Sie den automatisch generierten Slug nicht mögen).


18

Es ist ein beschreibender Teil der URL, der dazu dient, die Beschreibung des Menschen menschlicher zu gestalten, ohne jedoch unbedingt vom Webserver benötigt zu werden - in Was ist ein "Slug" in Django? Der Slug ist 'in-django-what-is-a-slug', aber der Slug wird nicht verwendet, um die Seite zu bestimmen, die bedient wird (zumindest auf dieser Site).


17

Slug ist eine URL-freundliche Kurzbezeichnung für bestimmte Inhalte. Es enthält nur Buchstaben, Zahlen, Unterstriche oder Bindestriche. Slugs werden normalerweise mit dem jeweiligen Inhalt gespeichert und als URL-Zeichenfolge übergeben.

Slug kann mit SlugField erstellt werden

Ex:

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

Wenn Sie den Titel als Slug verwenden möchten, hat django eine einfache Funktion namens slugify

from django.template.defaultfilters import slugify

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

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

Wenn es Eindeutigkeit benötigt, fügen Sie unique=Truein Schneckenfeld hinzu.

Zum Beispiel aus dem vorherigen Beispiel:

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

Sind Sie faul, Schneckenprozess zu machen? Keine Sorge, dieses Plugin wird dir helfen. Django-Autoslug


8

Auch Auto Slug bei Django-Admin. Hinzugefügt bei ModelAdmin:

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

Wie hier:

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.