我正在尝试建立一个DJango网站,但是无论我输入到URL中,URL调度程序中的组匹配给我“p”。这是我的代码的相关部分:
来自用户的urls.py(它确实包含在主urls.py中)
url(r'^lookup?(?P<match_str>\w+)/$', views.lookup, name='user_lookup')
来自views.py
def lookup(request, match_str):
users = User.objects.filter(name__contains=match_str)
json = serializers.serialize("json", users)
return json
还有几个日志条目:
[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
我在print match_str
的视图中放了一个“调试”行,不管我说它,我得到'p'。这是怎么回事?
根据karthikr的要求,这是print request.GET, match_str
<QueryDict: {u'za': [u'']}> p
答案 0 :(得分:0)
您的正则表达式与日志中的URL不匹配。 GET转到/user/lookup
,字符串user
未包含在Django的url
中,将正则表达式更改为^lookup/\?(?P<match_str>\w+)$
,请求lookup/?someuser
创建一个命名组{ {1}},其值为match_str
。
我建议使用众多在线正则表达式测试程序中的一个来使用URL正则表达式。