【发布时间】:2014-07-01 22:57:12
【问题描述】:
我正在尝试创建一个 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
【问题讨论】:
-
这样做可能不是一个好主意。
lookup/(?P<match_str>\w+)/并将 URL 发送为/user/lookup/za/会更干净。?用于 GET 参数,您可以通过request.GET.get('blah')访问这些参数 -
是的,我也不这么认为,但这就是我从 AJAX 调用中获取 URL 的方式......也许这就是我需要考虑改变的地方......
-
@karthikr 我对 AJAX 缺乏经验,所以我没有意识到更改 URL 会多么简单。我现在更改了它,它得到了
match_str的正确值。但是,我仍然希望有人能够回答为什么它以前只返回“p”,只是为了知识。 -
只要
print request.GET, match_str-> 你会明白为什么。如果没有,只需编辑带有结果的问题,然后通知我。 -
@karthikr 添加到问题中。它并没有真正帮助我理解……这是您期望它显示的内容吗?