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

时间:2014-07-01 22:57:12

标签: python regex django

我正在尝试建立一个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

1 个答案:

答案 0 :(得分:0)

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

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