2017-10-20 130 views
1

在Django应用程序为什么不工作这个表达式代码

在这里工作是我的urls.py

urlpattterns = [url(r'^(?P<leagueId>[0-9]+)/(?P<year>[0-9]+)/(?P<team>[\S]+)/$', views.team_detail, name="team_detail"),] 

一个例子网址是沿着线:

http://localhost:8000/123456/2017/Johnny%20Rocket/ 

我试着玩Pythex,但我无法找到匹配的网址

注意:传递的变量是/ {number }/{year}/{name}

该名称可以由字母数字字符和空格组成。

+1

但'%20'是空白的编码...使用'+'代替。 –

+0

我想大量的流量来自[django]以外的标签。 Django会在字符串匹配正则表达式之前提取URL路径并剪切第一个斜杠。 – knbk

回答

3

字符类\S匹配除空白之外的任何内容,并且%20在与正则表达式匹配之前被解码为空格。

要匹配字母数字字符和空格,可以使用[\w\s]

+0

谢谢!这工作! –

0

我会使用正则表达式如下:

r"(?P<leagueId>\d+)/(?P<year>\d+)/(?P<team>[^/]+)/$" 

一些小的改动:

  • 拿出^这意味着行首
  • 改变[0-9]到\ d

但是大部分是该部分。我喜欢使用负面的字符类。你基本上要一切匹配下一

/ 

而这正是

[^/]+ 

会为你做。

您可能要一年来限制像一个范围:

\d{2,4} 
+0

谢谢,这也工作了! –

+0

在Django的上下文中,向起始处添加斜杠实际上是不正确的。路径被提取,解码,并且在字符串与正则表达式匹配之前,第一个斜杠被切断。 – knbk

+0

酷!很高兴知道,我不知道Django – sniperd

相关问题