2009-10-10 4 views
5

ich auf einem django Projekt arbeitete und möchte eine Schnecke am Ende der URL enthalten, wie hier auf stackoverflow.com getan wird: http://example.com/object/1/my-slug-generated-from-my-title wirdLieber einen Slug in die DB speichern oder dynamisch generieren?

Der Objekt-ID das Element zu suchen verwendet werden, nicht Die Slug - und, wie stackoverflow.com, die Slug spielt keine Rolle, wenn Sie den Link bekommen (nur bei der Anzeige).

Frage: Gibt es einen Nachteil (oder oben), um den Slug dynamisch zu generieren, anstatt ihn als tatsächliches Datenbankfeld zu speichern?

Zum Beispiel (nicht echter Code):

class Widget(models.Model): 
    title = models.CharField() 

    def _slug(self): 
     return slugify(self.title) 
    slug = property(_slug) 

Anstatt mit einem etwas wie ein AutoSlugField (for example)?

Da mein Plan ist, es mit dem Titel übereinstimmen zu lassen, wusste ich nicht, ob es sinnvoll ist, ein doppeltes Feld in der Datenbank zu haben.

Danke!

Antwort

8

Wenn Sie den Slug für dekorative (statt Lookup-) Zwecke verwenden, ist die dynamische Generierung die beste Idee.

Zusätzlich wird die Codebeispiel Sie auf dem Laufenden kann wie folgt geschrieben werden:

@property 
def slug(self): 
    return slugify(self.title) 
+0

Danke für diesen Tipp - immer besser aussehend! Bin dankbar. – thornomad

1

Der Nachteil wäre, dass Sie automatisch die Schnecke jedes Mal, wenn die Seite machen zu erzeugen. Der Vorteil ist, dass Sie in der Datenbank keinen Speicherplatz mit einem Feld belegen, das niemals direkt abgefragt wird.

Jeder Weg ist in Ordnung, es hängt nur von Ihrer Leistung vs. Platzbedarf ab.

+0

Ja - das waren meine Gedanken. Ich wusste nicht, ob eine dieser Methoden _bevorzugt_ war ... vielleicht kommt es auf den Server an. – thornomad

+0

Beide sind vernachlässigbar. 1 Millionen Slugs, 50 Bytes wären jeweils 50 MB. Die Berechnung wäre ebenfalls trivial. – Medorator

0

Der Hauptnachteil der dynamischen Generierung von Slugs besteht darin, dass Sie die Fähigkeit verpassen, Slugs pro Objekt anzupassen, z. mache sie kürzer und hübscher. Für englische Titel kann das OK sein, aber für nicht-englischen Inhalt können generierte Slugs hässlich sein.

2

Versuchen Sie, einen Slug aus dem Wort "Café" oder "浦 安 鉄 筋 家族" zu machen.

Wahrscheinlichkeiten sind, dass es wie Kacke aussieht, es sei denn, Sie sind wirklich gut vorbereitet.

Manchmal benötigen Sie die Fähigkeit, Schnecken anzupassen.

+0

+1, Interessant. Ich denke, du schlägst vor, dass es gespeichert werden sollte (weil es möglicherweise angepasst worden ist). – Edmund

+0

Entschuldigung, ja, das ist es, was ich vorschlage. Ich war nicht zu klar, war ich :) –

+0

Würden Sie die Ausreißer manuell slugify? In vielen Designs ist dies nicht manuell möglich. Wenn Sie dies jedoch auf der Grundlage bestimmter Regeln tun, um Slugs anzupassen, können Sie diese Regeln auch für das dynamische Generieren von Slugs kodieren. Fehle ich etwas? – Medorator