2009-07-02 10 views
9

Immer, wenn ich eine neue Sprache/framework lernen, habe ich immer ein Content Management System machen ...rekursive URL-Muster CMS Stil

Ich lerne Python & Django und ich bin fest ein URL-Muster mit zu machen, das wird Wähle die richtige Seite aus.

Zum Beispiel für einen Single-Level-URL-Muster, die ich habe:

url(r'^(?P<segment>[-\w]+)/$', views.page_by_slug, name='pg_slug'), 

die für Urls wie große Werke:

http://localhost:8000/page/ 

Nun, ich bin nicht sicher, ob ich bekommen kann Djangos URL-System zu bringen, um eine Liste von Schnecken ala zurück:

http://localhost:8000/parent/child/grandchild/ 

zurückkehren würden Eltern, Kind, Enkelkind.

Also ist das etwas, das Django schon macht? Oder ändere ich mein ursprüngliches URL-Muster, um Schrägstriche zuzulassen und die URL-Daten dort zu extrahieren?

Vielen Dank für die Hilfe im Voraus.

Antwort

13

Das liegt daran, dass Ihr regulärer Ausdruck keine Zeichen der Mitte '/' zulässt. Die rekursive Definition von URL-Segmentmustern ist zwar möglich, wird aber trotzdem als Chunk an Ihre View-Funktion übergeben.

dieses

url(r'^(?P<segments>[-/\w]+)/$', views.page_by_slug, name='pg_slug'), 

Versuchen und spalten segments Argument page_by_slug() durch '/' übergeben, dann werden Sie ['parent', 'child', 'grandchild'] erhalten. Ich bin mir nicht sicher, wie Sie das Seitenmodell organisiert haben, aber wenn es nicht sehr sophistiziert ist, sollten Sie das flatpages Paket, das bereits in Django enthalten ist, verwenden oder verbessern. Wenn Sie andere Arten von URLs haben, die nicht auf vom Benutzer generierte Seiten, sondern auf systemeigene Seiten verweisen, sollten Sie sie vor dem Muster platzieren, das Sie aufgelistet haben, da Djangos URL-Übereinstimmungsmechanismus der angegebenen Reihenfolge entspricht.

+1

Danke. Sehr geschätzt! – bkorte