2017-02-23 2 views
0

Ich entwickle eine blogähnliche Anwendung, wo es Posts mit ähnlichen oder manchmal gleichen Titeln geben wird. Auch Benutzer können die Titel ihres Posts jederzeit bearbeiten. Momentan sehen meine URLs so aus.Sollte ich Slug-Feld auch in Django-URLs verwenden?

<a href="{% url 'myapp:read' post.id %}">{{post.title}} </a> 

Jetzt habe ich gelesen paar Antworten, wo zusammen mit id sie slug auch wie url dieser Frage bestanden haben. Auch mit id wird die url einzigartig sein, oder? warum dann slug? und wenn es für die Humanisierung der url ist, sollte es auch zu speichern? Um es zusammenzufassen:

  1. Wenn id einzigartig ist, warum dann slug?
  2. Wenn es wichtig ist, sollten wir es dann speichern?
  3. Wenn es etwas mit zu tun hat, bitte erarbeiten Sie die Funktionsweise von canonical links & wie slug kann es helfen? oder leite mich wenigstens zur Quelle.

Referenz: when to store slugfield in database in django? und diese answer

+1

Slug ist nur eine Möglichkeit für Sie, um schnell zu verstehen, worum es bei dieser URL geht. Weil url dieser Frage http://stackoverflow.com/questions/42407755/does-it-work sein könnte und immer noch zum selben Beitrag weiterleitet. Aber gesagt, es hängt auch von der Implementierung ab. In diesem Fall könnte es sein, dass Stack Overflow nach einem gültigen Slug sucht, der der Post-ID entspricht, und wenn er nicht gefunden wird, wird er zum ursprünglichen weitergeleitet. – AKS

+0

@AKS, Ihr Kommentar verdient, eine Antwort auf diese Frage zu sein – Marat

Antwort

0
  1. Wenn id einzigartig ist, warum dann Slug?

Slug ist nur ein Weg für Sie schnell ein Gefühl dafür zu bekommen, was diese URL ist über - die Lesbarkeit der es nicht nur um mit id garantiert.

  1. Wenn es wichtig ist, sollten wir es dann speichern?

URL dieser Frage Should I use slug field too in django URLs? sein könnte und immer noch leitet es automatisch zu gleichen Beitrag. Aber gesagt, es hängt auch von der Implementierung ab. In diesem Fall könnte es sein, dass Stack Overflow nach einem gültigen Slug sucht, der der Post-ID entspricht, und wenn er nicht gefunden wird, wird er zum ursprünglichen weitergeleitet.

Ich habe gerade den Titel der Frage und als Folge die URL auch geändert:

old => http://stackoverflow.com/questions/42407755/should-i-use-slug-field-too-in-django 
new => http://stackoverflow.com/questions/42407755/should-i-use-slug-field-too-in-django-urls 

Also, wenn Sie speichern die Slug Sie müssen sicherstellen, dass es aktualisiert wird, jedes Mal Titel geändert wird.

  1. Wenn es irgendetwas mit zu tun hat Sie bitte die Arbeits kanonischer Links erarbeiten & wie Slug ihm helfen kann?

Canonical Links werden von Suchmaschinen verwendet doppelte URLs zu identifizieren, die zu gleichen Inhalt führen.Sie können auf den Quellcode dieser Beitrag sehen und Sie können folgende kanonische Link in der HEAD finden:

<link rel="canonical" href="http://stackoverflow.com/questions/42407755/should-i-use-slug-field-too-in-django-urls"> 

Eine Suchmaschine sammelt diese URL und sendet es Ihnen, wenn Sie für einige Keywords suchen, die diese URL übereinstimmt. Einer der Faktoren, auf deren Grundlage die Suchmaschine die Seiten sortiert, sind übereinstimmende Schlüsselwörter in der URL. Eine gute Schnecke hilft der Suchmaschine, die besten Ergebnisse des Benutzers basierend auf den übereinstimmenden Keywords in der URL zurückzugeben.

+0

Danke für die Antwort .. !!also wird es richtig sein, wenn ich sage, ich werde sie in urls verwenden, aber sie nirgends speichern und Suchmaschinen werden immer noch in der Lage sein, sie zu nutzen? – Niraj

+0

Ja, das stimmt! – AKS

+0

Danke Sir ..! das nervt mich seit Tagen ..! :) – Niraj

0

Sie müssen einen Beitrag mit genau 1 eindeutigen Kennung identifizieren. Das kann entweder die ID oder der Slug sein. Beide zu verwenden ist sinnlos und fehleranfällig. Sie können sowohl einen Slug als auch eine ID in den Titel einfügen. In diesem Fall sollten Sie wahrscheinlich den vollständig in der URL übergebenen Slug ignorieren und die ID verwenden.

Sie die Schnecke ignorieren und nur die ID wie folgt verwenden:

url(r'^(?:[\w-]+)/(?<id>\d+)/$', BlogView.as_view(), name='blog-view') 

Wenn Sie tun, dass Sie die Schnecke überhaupt nicht speichern müssen, erzeugen nur aus dem Titel jedes Mal, wenn Sie verwenden es.

Persönlich bevorzuge ich Slugs, weil sie freundlichere URLs bieten, die sich gut mit Django integrieren lassen. Zum Beispiel mit einer Klasse basiert Ansicht können Sie eine URL erstellen, die wie folgt aussieht:

url(r'^(?P<slug>[\w-]+)/$', BlogView.as_view(), name='blog-view') 

Und Ihre Klasse basierte Sicht ist super sauber:

class BlogView(DetailView): 
    model=BlogEntry 

Das ist es! Django weiß automatisch, wie das Modell durch den Slug aussieht, und wenn man davon ausgeht, dass man die Vorlage richtig benannt hat, muss man nichts weiter verdrahten (Ok, wahrscheinlich). Es gibt ein wirklich helpful gist auf Github über dieses Setup.

Wenn Sie Slugs verwenden möchten, generieren Sie es, wenn Sie den Datensatz speichern und verwenden Sie eine Art automatische Mangelung, um es eindeutig zu machen, wenn es eine Kollision gibt (oder lassen Sie den Benutzer manuell überschreiben). In einem meiner Blogs verwende ich das Datum im Slug, um es eindeutiger zu machen, und benutze dann eine rekursive Funktion, um sicherzustellen, dass es einzigartig ist. (here's an little tutorial someone made on making unique slugs). Es ist eine gute Idee, einen Weg einzubauen, um den Slug auch manuell zu überfahren.

In dem obigen Link er eine for-Schleife verwendet, persönlich ziehe ich eine rekursive Funktion wie:

def autoslug(self, slug, attempt=1): 
    if MyModel.objects.filter(slug=slug).exists(): 
     return autoslug(slug[:47]+"%d" % attempt, attempt + 1) 
    else: 
     return slug 

Sie ein Butzen Feld auf dem Modell erstellen die Schnecke zu speichern. Zum Beispiel können Klassenbasierte Ansichten einen Slug übergeben und es wird auf magische Weise herausfinden, was Sie wollen. Djangos hat eine Vielzahl von internen Tools, die auf diesen Namen verweisen, also halte es einfach und benutze den gleichen Namen, den django erwartet.

Auch die URL für eine bestimmte Ressource sollte unverändert bleiben, so dass Links persistent sind. Das Ändern eines Slugs beim Ändern des Titels bedeutet, dass sich die URL für die Ressource ändert. IMO ist es immer eine schlechte Idee, dass dieselbe Ressource eine sich ändernde URL hat. Es ist schlecht für SEO und schlecht für jeden, der deine Ressourcen extern verlinkt.

+0

Danke für die Erklärung ..! Nach Ihrem letzten Para, wenn ich 'slug' und' id' implementieren die Art Stackoverflow implementiert hat (d. H. Änderung der 'slug' in' url' wird nicht die resultierende Ressource ändern), wird es Auswirkungen auf die SEO? Ich meine, dass ich nur 'id' in Betracht ziehe,' slug' ist nur der Lesbarkeit wegen. – Niraj

+0

Wenn der Slug Teil der URL ist und sich ändert, wird sich dies wahrscheinlich auf SEO auswirken. –

+0

Danke, dass du mir geholfen hast, verschiedene Dinge zu verstehen Dennis ..! – Niraj

Verwandte Themen