2012-12-11 38 views
2

我有一個我想讓狀態令牌爲可選的url。如果狀態令牌沒有在url中提供,我在view method參數中給出一個默認值。我嘗試用這個(?:/(?P<status>\d+))?$代替令牌,但似乎不工作。由於Django:我怎樣才能使URL的一部分可選

url(r'^(?P<status>\d+)/$', frequest_list, name="frequest_list"), 

def request_list(request, status=1): 
... 
... 

更新: 這是我努力的格局:

所以,如果我嘗試localhost/features/作品以及

但如果我這樣做localhost/features/1/失敗

+0

爲什麼它不能正常工作?我使用相同的單個url,可選的捕獲方法。 – jdi

+0

它給了我404說沒有匹配的網址。我錯過了什麼嗎? –

+0

你可以發佈你嘗試過的確切模式嗎? – jdi

回答

3

剛創建調用相同視圖的第二個URL條目:

url(r'^features/$', frequest_list, name="frequest_list_default"), 
url(r'^features/(?P<status>\d+)/$', frequest_list, name="frequest_list"), 
+0

我其實想包括一些更多的可選過濾器,所以試圖避免這個 –

1

我在我的一些項目中使用單個url可選捕獲,並且它們工作正常。您可能需要調整模式以使尾隨/爲可選項。我認爲這是導致你的網址不匹配。 Django的確實有一個「APPEND_SLASH」設置BOOL會,如果缺少它添加到您的URL和不匹配:

url(r'^features(?:/(?P<status>\d+))?/?$', frequest_list, name="frequest_list") 

可選/很可能也可以寫成這樣:

url(r'^features/?(?:(?P<status>\d+)/?)?$', frequest_list, name="frequest_list") 
+0

如果我嘗試第一個,我會得到相同的404錯誤。在第二種情況下,它顯示爲_Nothing重複__ –

+0

我正在刪除URL中的__features__部分。更新的問題請看看。 –

+0

我在我自己的代碼中使用了相同的第一個模式,它工作正常。不知道它會出錯的地方。 – jdi