766 Stimmen

Was ist ein "Slug" in Django?

Wenn ich Django-Code lese, sehe ich in Modellen oft etwas, das "Slug" genannt 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 Slug-Ding verwendet werden?

(Ich habe seine Definition gelesen in dieses Glossar .)

56 Stimmen

Zum sofortigen Verständnis sehen Sie sich die URL der Website an, auf der Sie sich befinden: https://stackoverflow.com/questions/{id}/{slug}

955voto

Josh Smeaton Punkte 45913

Ein "Slug" ist eine Möglichkeit, eine gültige URL zu generieren, in der Regel unter Verwendung bereits vorhandener Daten. Ein Slug verwendet zum Beispiel den Titel eines Artikels, um eine URL zu generieren. Ich empfehle, den Slug mit Hilfe einer Funktion aus dem Titel (oder anderen Daten) zu generieren, 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>

Nun nehmen wir an, dass wir ein Django-Modell haben 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 zum Beispiel Artikel.id verwenden, so dass die URL wie folgt aussehen würde:

www.example.com/article/23

Oder Sie können sich auf den Titel wie folgt beziehen:

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

Da Leerzeichen in URLs ungültig sind, müssen sie ersetzt werden durch %20 was zur Folge hat:

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

Beide Versuche führen nicht zu sehr aussagekräftigen, leicht zu lesenden URL. Dies ist besser:

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

In diesem Beispiel, the-46-year-old-virgin ist ein Slug: Er wird aus dem Titel erstellt, indem alle Buchstaben kleingeschrieben und Leerzeichen durch Bindestriche ersetzt werden - .

Ein weiteres Beispiel finden Sie unter der URL dieser Webseite.

102 Stimmen

Gute Beschreibung, aber zu ergänzen: SlugField gewährleistet nicht von vornherein die Einzigartigkeit, so dass, wenn es standardmäßig verwendet wird, dies eine bessere URL ist: www.example.com/article/the-40-year-old-virgin/23/ Wo '23' die article.id ist, und ist, was tatsächlich verwendet wird, um die Abfrage zu tun (auch schneller als die Abfrage auf den Slug).

166 Stimmen

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

21 Stimmen

Wenn Sie Inhalte auf der Grundlage der ID bereitstellen, entscheiden Sie, ob der Slug mit dem Inhalt übereinstimmen soll (und 404 zurückgegeben werden soll, wenn dies nicht der Fall ist) oder ob er vollständig ignoriert werden soll. Ich glaube nicht, dass es eine allgemeine Regel dafür gibt, was aus SEO-Sicht am besten ist. SO zeigt diese Seite trotzdem an, wenn Sie Folgendes eingeben stackoverflow.com/questions/427102/ in Ihrem Browser.

177voto

Gestatten Sie mir, dass ich einen historischen Zusammenhang herstelle:

Der Begriff "Schnecke" hat mit dem Gießen von Metall - in diesem Fall Blei - zu tun, aus dem die Druckschriften hergestellt wurden. Jede Zeitung ließ damals ihre Schriftenfabrik regelmäßig umschmelzen und in neue Formen umgießen, da sie nach vielen Drucken abgenutzt waren. Lehrlinge wie ich haben dort ihre Karriere begonnen und sind bis ganz nach oben gekommen (heute nicht mehr).

Typographen mussten den Text eines Artikels rückwärts mit weise gestapelten Leitbuchstaben zusammensetzen. Zum Zeitpunkt des Drucks standen die Buchstaben also gerade auf dem Papier. Alle Typographen konnten die Zeitung spiegelverkehrt genauso schnell lesen wie die gedruckte. Daher waren die Schnecken und auch die langsamen Geschichten (die als letzte gesetzt wurden) auf der Bank und warteten, nur durch ihre ersten Buchstaben gekennzeichnet, meist auf den ganzen Titel, der im Allgemeinen besser lesbar war. Einige "heiße" Nachrichten warteten dort auf der Bank auf eine mögliche Korrektur in letzter Minute (Abendzeitung) vor der letzten Montage und dem endgültigen Druck.

Django stammt aus den Büros des Lawrence Journal in Kansas. Wahrscheinlich ist dort noch immer ein gewisser Druckjargon zu hören. A-django-enthusiast-&-freundlicher-alter-Schnecken-Junge-aus-Frankreich.

80voto

paxdiablo Punkte 809679

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

Es ist ein informeller Name, der einer Geschichte während des Produktionsprozesses gegeben wird. Während die Geschichte ihren Weg vom Schlagzeilenreporter (sofern diese überhaupt existieren mehr?) bis hin zum Redakteur bis hin zu den "Druckmaschinen", so wird es genannt, z. B. "Haben Sie die Fehler in der 'Kate-und-William'-Geschichte korrigiert?".

Einige Systeme (wie z.B. Django) verwenden den Slug als Teil der URL, um die Geschichte zu finden, ein Beispiel ist www.mysite.com/archives/kate-and-william .

Sogar Stack Overflow selbst tut dies, mit dem GEB-ähnlichen (a) selbstreferentiell https://stackoverflow.com/questions/427102/what-is-a-slug-in-django/427201#427201 obwohl Sie den Slug durch blahblah und sie wird es trotzdem gut finden.

Es könnte sogar noch früher entstanden sein, denn in Drehbüchern gab es zu Beginn jeder Szene "Sluglines", die im Grunde den Hintergrund für diese Szene darstellten (wo, wann und so weiter). Er ist insofern sehr ähnlich, als er eine Zusammenfassung oder eine Präambel für das Folgende darstellt.

Auf einer Linotype-Maschine war ein Rohling ein einzeiliges Metallstück, das aus den einzelnen Buchstabenformen erstellt wurde. Dadurch, dass ein einziger Rohling für die gesamte Zeile erstellt wurde, war dies eine erhebliche Verbesserung gegenüber der alten zeichenweisen Zusammenstellung.

Obwohl es sich hier um eine reine Vermutung handelt, war eine frühe Bedeutung von "slug" die einer gefälschten Münze (die irgendwie gepresst werden musste). Ich könnte mir vorstellen, dass diese Verwendung in den Begriff des Druckens umgewandelt wurde (da das Fälschungsstück unter Verwendung der Originalzeichen gepresst werden musste) und von dort aus von der Definition "Metallstück" zur Definition "Zusammenfassung einer Geschichte" überging. Von da aus ist es nur noch ein kleiner Schritt vom Druck zur Online-Welt.


(a) "Godel, Escher, Bach", von einem Douglas Hofstadter das ich (zumindest) für eines der großen modernen intellektuellen Werke halte. Sie sollten sich auch sein anderes Werk, "Metamagische Themas", ansehen.

0 Stimmen

Dmid://uu457selfrefer1645699930

42voto

Manjit Kumar Punkte 1141

Slug ist ein Zeitungsbegriff. Ein Slug 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 von gültigen URLs für Ihre dynamisch erstellten Web-Seiten.

So wie Sie diese Frage bei Stack Overflow eingegeben haben, wurde eine dynamische Seite erstellt, und in der Adressleiste sehen Sie den Titel Ihrer Frage mit "-" anstelle der Leerzeichen. Das ist genau die Aufgabe eines Slug-Feldes.

Enter image description here

Der von Ihnen eingegebene Titel lautete etwa so -> Was ist ein "slug" in Django?

Wenn man es in einem Slug-Feld speichert, wird es zu "what-is-a-slug-in-django" (siehe URL dieser Seite)

34voto

Arun V Jose Punkte 2153

Slug ist eine URL-freundliche Kurzbezeichnung für bestimmte Inhalte. Er enthält nur Buchstaben, Zahlen, Unterstriche oder Bindestriche. Slugs werden in der Regel mit dem jeweiligen Inhalt gespeichert und als URL-String ü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 wollen, 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 eindeutig sein muss, fügen Sie unique=True im Schneckenfeld.

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, Slug-Prozess zu tun? keine Sorge, dieses Plugin wird Ihnen helfen. django-autoslug

1 Stimmen

Kann Django-Erweiterungen AutoSlugField verwenden, funktioniert am besten in den meisten Fällen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X