2009-07-02 23 views
9

Ogni volta che imparare una nuova lingua/quadro, ho sempre fare un sistema di gestione dei contenuti ...ricorsive Patterns URL CMS stile

sto imparando Python & Django e mi sono bloccato con fare un pattern URL che scegli la pagina giusta.

Ad esempio, per un modello di URL a livello singolo, ho:

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

che funziona alla grande per gli URL come:

http://localhost:8000/page/ 

Ora, io non sono sicuro se posso ottenere sistema di URL di Django per riportare un elenco di lumache ala:

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

sarebbero tornati genitore, figlio, nipote.

Quindi questo è qualcosa che Django fa già? O modifico il mio pattern URL originale per consentire le barre e estrarre i dati URL lì?

Grazie per l'aiuto in anticipo.

risposta

13

Questo perché la tua espressione regolare non consente i caratteri "/" medi. La definizione ricorsiva di pattern di segmenti di url può essere possibile, ma in ogni caso sarebbe passata come una porzione alla funzione di visualizzazione.

Prova questa argomentazione

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

e dividere segments passato a page_by_slug() da '/', allora si otterrà ['parent', 'child', 'grandchild']. Non sono sicuro di come hai organizzato il modello di pagina, ma se non è molto sofisticato, considera l'utilizzo o il miglioramento del pacchetto flatpages che è già incluso in Django.

Nota: se hai altri tipi di URL che non indicano pagine generate dall'utente ma pagine del sistema, dovresti metterli prima del pattern che hai elencato perché il meccanismo di corrispondenza url di Django segue l'ordine dato.

+1

Grazie. Molto apprezzato! – bkorte