Python Django URL调度程序与命名组不匹配

Python Django URL调度程序与命名组不匹配,python,regex,django,Python,Regex,Django,我试图创建一个DJango站点,但是URL调度程序中的组匹配给了我“p”,无论我在URL中输入什么。以下是我的代码的相关部分: 来自用户的URL.py(它确实包含在主URL.py中) 和几个日志条目: [01/Jul/2014 22:43:17] "GET /user/lookup/?z HTTP/1.1" 500 11363 [01/Jul/2014 22:43:18] "GET /user/lookup/?za HTTP/1.1" 500 11363 仔细观察,我的AJAX实际上发送了两个

我试图创建一个DJango站点,但是URL调度程序中的组匹配给了我“p”,无论我在URL中输入什么。以下是我的代码的相关部分:

来自用户的URL.py(它确实包含在主URL.py中)

和几个日志条目:

[01/Jul/2014 22:43:17] "GET /user/lookup/?z HTTP/1.1" 500 11363
[01/Jul/2014 22:43:18] "GET /user/lookup/?za HTTP/1.1" 500 11363
仔细观察,我的AJAX实际上发送了两个调用,第二个调用实际上是匹配的。上述日志行的第二次调用的日志为:

[01/Jul/2014 22:43:17] "GET /merchant/lookup?z HTTP/1.1" 301 0
[01/Jul/2014 22:43:18] "GET /merchant/lookup?za HTTP/1.1" 301 0
我在视图中放置了一个“debug”行,以
print match\u str
,无论我如何放置,都会得到“p”。这是怎么回事


根据karthikr的请求,这里是打印请求的结果。获取,匹配

<QueryDict: {u'za': [u'']}> p
p

您的正则表达式与日志中的URL不匹配。GET转到
/user/lookup
,Django的
url
中不包含字符串
user
,将正则表达式更改为
^lookup/\?(?P\w+)$
,请求
lookup/?someuser
创建一个名为
的组,该组的值为
someuser


我建议使用众多在线正则表达式测试程序中的一个来使用URL正则表达式。

这样做可能不是一个好主意。
lookup/(?p\w+)/
并将URL作为
/user/lookup/za/
发送会更干净
用于获取参数,您可以通过执行
request.GET.GET('blah')
来访问这些参数。
是的,我也不这么认为,但这就是我从AJAX调用中获取URL的方式……也许这正是我需要研究更改的内容……@karthikr我对AJAX没有经验,所以我没有意识到更改URL有多么简单。我现在更改了它,它得到了
match\u str
的正确值。然而,我仍然希望有人能够回答为什么它之前只返回“p”,只是为了了解情况。只需执行
print request.GET,match_str
->您就会明白为什么。如果没有,就用结果编辑问题,并通知我。@karthikr添加到问题中。它并没有真正帮助我理解…这就是你期望它显示的吗?奇怪的是它与正则表达式匹配。仔细观察,我的AJAX似乎发送了两个调用,第二个调用类似于“GET/merchant/lookup?za HTTP/1.1”301 0,我也会更新这个问题。
[01/Jul/2014 22:43:17] "GET /merchant/lookup?z HTTP/1.1" 301 0
[01/Jul/2014 22:43:18] "GET /merchant/lookup?za HTTP/1.1" 301 0
<QueryDict: {u'za': [u'']}> p