2016-07-04 24 views
0

任務是編寫兩個url模式。Django中的高級URL

第一個將採取一個參數<path>,其可以是具有隨機深度的任何URL:

test/dorogi/

test/foo/bar/as/deep/as/you/want

第二個將是相同的第一個,但最後有一個數字。

test/dorogi/1/

它talkes兩個參數:<path><pk>。最後一個是一個數字。


我做的第一圖案的解決方案:

url(r'^(?P<path>.*)/', mptt_urls.view(model='activities.models.Category', view='activities.views.category', 
             slug_field='slug'), name='activities'), 

但我怎麼做第二個和防止beteween他們的任何衝突?

它應該是這樣的:

url(r'^...', views.ArticleDetailView.as_view(), name='article-detail'), 
+1

只需添加這個表達式: '(P ?)(/ \ w + /?)+' 匹配的第一個,但應按照網址順序排在第二位。第二個更嚴格:'(?P )。*(/ [0-9] + /?)$' – Destrif

回答

2

第二個參數只需添加到正則表達式的第一圖案:

r'^(?P<path>.*)/(?P<pk>\d+)/$' 

但要確保把那個之前第一個在您的網址列表。

(請注意,你一定要以$終止你的模式,正如我上面做了。)

+0

是的。但後來我的網址看起來像'/ articles/news/regional // 4058 /'。注意'pk'之前的雙斜槓? – Viktor