2011-09-21 47 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 " "

再次,不要这样做。