2009-07-02 54 views
9

每當我學習一門新的語言/框架,我總是做一個內容管理系統...遞歸URL模式CMS風格

我正在學習Python的& Django和我卡與進行URL模式會選擇正確的頁面。

例如,對於一個單級URL模式,我有:

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

這對於像網址的偉大工程:

http://localhost:8000/page/ 

現在,我不知道如果我能得到Django的URL系統帶回一個slug列表ala:

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

會返回父,子,孫。

那麼,這是Django已經做了什麼?或者,我是否修改了原始網址格式以允許在其中提取斜槓並提取網址數據?

感謝您的幫助提前。

回答

13

這是因爲你的正則表達式不允許中間的'/'字符。 url段模式的遞歸定義可能是可能的,但無論如何它將作爲一個塊傳遞給你的視圖函數。

嘗試通過 '/' 傳遞給page_by_slug()這個

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

和分裂segments說法,那麼你會得到['parent', 'child', 'grandchild']。我不確定你是如何組織頁面模型的,但如果它沒有太多的複雜性,請考慮使用或改進已包含在Django中的頁面包。

請注意,如果您有其他類型的網址並未指明用戶生成的頁面,而是系統自己的網頁,則應將它們放在您列出的模式之前,因爲Django的url匹配機制遵循給定的順序。

+1

謝謝。非常感激! – bkorte 2009-07-02 02:42:07