Es ist nicht schwer. Ja wirklich.
In URL-Konfigurationen ist jeder Eintrag einfach ein regulärer Ausdruck, der mit einer URL übereinstimmen muss, die von einem Endbenutzer besucht wird. r'^main/(?P<slug>[-\w]+)/'
wird zum Beispiel Übereinstimmen mit: http://localhost:8000/main/some-slug/
Sie eine besondere Art von Syntax in Ihrem regulären Ausdruck verwenden können, um angepassten Daten zu extrahieren und diese Daten als Variable zu Ihrer Ansicht Funktion übergeben.
das Bit, das das tut, ist es (?P<slug>[-\w]+)
Worte (in diesem Fall ein slug) in ein slug genannten variable angepaßten puts (<slug>
das Teil, definiert sie die Variablennamen). In diesem bescheidenen Beispiel wird die Slug-Variable auf "some-slug" gesetzt.
Die Variable wird in der Ansicht wie folgt zugänglich:
from django.http import HttpResponse
def handle_my_view(request, slug=homepage):
# do stuff with slug
return HttpResponse("I did stuff with slug: {}".format(slug))
Erfahren Sie mehr über, und Geige mit regulären Ausdrücken
Bei http://www.regexr.com
Aber warum sehe ich Butzen In Modellen verwendet ?:
Ein Slug (oder eine benannte Variable, die von einer URL-Interception kommt) kann für alles verwendet werden. Im Allgemeinen wird die Slug-Variable selbst verwendet, um einen Datenbankeintrag einiger Art zu erhalten ... Und das beinhaltet die Verwendung von Modellen.
Sie können tun, was Sie wollen mit ihnen; füge Zeug hinzu, subtrahiere Zeug, kapitalisiere, was auch immer. Der Himmel ist die Grenze.
Aus den Django docs:
https://docs.djangoproject.com/en/1.10/topics/http/urls/#named-groups
Benannte Gruppen
Das obige Beispiel verwendet, um einfache, nicht-genannt regulären Ausdrücken Gruppen (über Klammern) Bits zu erfassen der URL und übergeben Sie sie als Positionsargumente an eine Ansicht. In einer fortgeschritteneren Verwendung ist es möglich, benannte Gruppen mit regulärem Ausdruck zu verwenden, um URL-Bits zu erfassen und sie als Schlüsselwortargumente an eine Ansicht weiterzugeben.
In regulären Python-Ausdrücken ist die Syntax für benannte Gruppen mit regulären Ausdrücken (?Ppattern), wobei name der Name der Gruppe und pattern ein passendes Muster ist.
Hier ist das obige Beispiel URLconf, neu geschrieben benannten Gruppen zu verwenden:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]
Dies erreicht genau die gleichen wie im vorherigen Beispiel, mit einem feinen Unterschied: Die erfassten Werte werden übergeben Funktionen als Schlüsselwort-Argumente anzuzeigen eher als Positionsargumente. Zum Beispiel:
Eine Anfrage an /articles/2005/03/
würde die Funktion views.month_archive(request, year='2005', month='03')
statt views.month_archive(request, '2005', '03')
aufrufen. Eine Anfrage an /articles/2003/03/03/
würde die Funktion views.article_detail(request, year='2003', month='03', day='03')
aufrufen.
In der Praxis bedeutet dies, dass Ihre URLconfs etwas expliziter und weniger anfällig für Fehler in der Reihenfolge der Argumente sind - und Sie können die Argumente in den Funktionsdefinitionen Ihrer Ansichten neu anordnen. Natürlich gehen diese Vorteile auf Kosten der Kürze; Einige Entwickler finden die Syntax der benannten Gruppe hässlich und zu ausführlich.
'slug' sollte der Parameter für die Anfragefunktionen sein (wie get, post) in Ihrer' Ansichten' Klasse –
habe ich, also sollte ich einen Dekorator auf jede meiner Ansichten setzen (es gibt ungefähr 12 oder so in meinem main.urls), die diesen Parameter definieren würden. Gibt es einen effizienten Weg? – Desario
Ich bin mir nicht sicher, was Sie für die Schnecke * für * wollen. Ein Slug ist eine Möglichkeit, einen bestimmten Datensatz in der db zu identifizieren, sodass er nur bei einem Modell sinnvoll ist. Was genau willst du damit machen? Wenn Sie nur zwischen URLs unterscheiden, die zu verschiedenen Ansichten gehören, ist dies nur ein Standard-URL-Muster und es wird kein Slug benötigt. –