【问题标题】:Help with capturing URL fragment in Django帮助在 Django 中捕获 URL 片段
【发布时间】:2011-11-21 14:30:53
【问题描述】:

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

/cards/series/系列名称/

我试图捕捉系列名称的地方

我的基本 urls.py 包括:

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

然后我的卡片/urls.py 包括

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

但是,正则表达式不匹配 (404)。如果我像这样对路径进行硬编码:

(r'^series/foo/$',

然后我可以让它匹配 /cards/series/foo/

那么,有没有人知道我做错了什么,为什么我的正则表达式没有捕捉到 /cards/series/SERIES NAME/ ?

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

/cards/series/FOO/

匹配,但是:

/cards/series/FOO BAR/

或任何带有空格的东西都不匹配。

更新:在这里找到解决方案:

how to unescape special characters in django urlpatterns

这是:

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

【问题讨论】:

  • 您能告诉我们,您尝试将哪个网址与r'^series/(\w+)/$' 匹配吗?
  • 是的,我刚刚意识到它会匹配单个单词,但不会匹配多个单词。我已经用更多信息更新了原版。

标签: django django-urls


【解决方案1】:

网址中不允许有空格。他们必须逃脱。

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

所以本质上,不要这样做。如果空格很重要,它们应该以/cards/series/SERIES%20NAME/ 之类的形式出现在您的 URL 中。如今,使用连字符被认为是更好的做法,尽管下划线也可以。使用大写字母是合法的,但会让一些人(比如我)觉得格式不好。

至于为什么模式不起作用,Django的查询模式是正则表达式:

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

您正在捕获模式\w+。而\wAlphanumeric characters plus "_" 的替代品,而随后的+ 表示匹配one or more of the preceding element。空格不是字母数字字符,因此如果您也想匹配空格,则必须将其添加到您找到的集合中。括号用于表示一组可接受的字符,因此[\w ]+ 表示Alphanumeric characters plus "_" plus " "

再说一遍,不要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多