帮助在Django中捕获URL片段

时间:2011-09-21 03:54:07

标签: django django-urls

我正在开发一个django项目,并尝试以下列形式匹配网址:

/ cards / series / SERIES NAME /

我正在尝试捕获序列名称

我的基础urls.py包括:

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

然后我的cards / urls.py包含

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

然而,正则表达式不匹配(404)。如果我像这样硬编码路径:

(r'^series/foo/$',

然后我可以将它与/ cards / series / foo /

匹配

那么,有没有人知道我做错了什么,为什么我的正则表达不捕捉/卡片/系列/系列名称/?

更新:正则表达式将匹配单个单词,但不匹配多个单词。所以:

/cards/series/FOO/

匹配,但是:

/cards/series/FOO BAR/

或任何空格不匹配。

更新:在此处找到解决方案:

how to unescape special characters in django urlpatterns

是:

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

1 个答案:

答案 0 :(得分:2)

您不得在网址中包含空格。他们必须逃脱。

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

基本上,不要这样做。如果空格很重要,那么它们应该像/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 " "

再次,不要这样做。