2011-09-21 41 views
0

我工作的一個Django項目,並試圖在以下形式的網址相匹配捕捉網址片段:幫助在Django

/卡/系列/系列名稱/

在那裏我試圖捕捉系列名稱

我的基本urls.py包括:

(r'^cards/', include('cards.urls')), 

,然後我的卡/ urls.py包括

(r'^series/(\w+)/$', 

但是,正則表達式不匹配(404)。如果我硬編碼像這樣的路徑:我能得到它的匹配/卡/系列/富/

(r'^series/foo/$', 

然後

因此,沒有人有什麼我做錯了的想法,爲什麼我的正則表達式不捕捉/卡/系列/系列名/?

更新:正則表達式將匹配單個單詞,但不是多個。所以:

/cards/series/FOO/ 

比賽,但是:

/cards/series/FOO BAR/ 

或有空間的任何不匹配。

更新:找到了解決辦法在這裏:

how to unescape special characters in django urlpatterns

是:

(r'^series/([\w ]+)/$', 
+0

你能告訴我們,你試圖用'r'^ series /(\ w +)/ $''匹配哪個url嗎? – j0ker

+0

是的,我剛剛意識到它會匹配單個單詞,但不是多個單詞。我更新了更多信息的原件。 – mikechambers

回答

2

你不允許在網址中添加空格。他們必須逃脫。

http://en.wikipedia.org/wiki/Query_string#URL_encoding

所以基本上,不這樣做。如果空格很重要,它們應該在您的URL中結束,如/cards/series/SERIES%20NAME/。這些天使用連字符被認爲是更好的做法,但下劃線也可以。使用大寫字母是合法的,但會將一些人(如我)視爲可憐的形式。

至於爲什麼模式不起作用,Django的查詢模式是正則表達式:

http://en.wikipedia.org/wiki/Regular_expression

您捕捉模式\w+。並且\wAlphanumeric characters plus "_"的替代品,而隨後的+表示匹配one or more of the preceding element。空格不是字母數字字符,所以如果你想匹配空格,你必須將它添加到一個你已經找到的集合。括號用於表示一組可接受的字符,因此[\w ]+將意味着Alphanumeric characters plus "_" plus " "

再次,不要這樣做。