【问题标题】:Django URL dispatcher not matching named groupDjango URL 调度程序与命名组不匹配
【发布时间】: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&lt;match_str&gt;\w+)/ 并将 URL 发送为/user/lookup/za/ 会更干净。 ? 用于 GET 参数,您可以通过 request.GET.get('blah') 访问这些参数
  • 是的,我也不这么认为,但这就是我从 AJAX 调用中获取 URL 的方式......也许这就是我需要考虑改变的地方......
  • @karthikr 我对 AJAX 缺乏经验,所以我没有意识到更改 URL 会多么简单。我现在更改了它,它得到了match_str 的正确值。但是,我仍然希望有人能够回答为什么它以前只返回“p”,只是为了知识。
  • 只要print request.GET, match_str -> 你会明白为什么。如果没有,只需编辑带有结果的问题,然后通知我。
  • @karthikr 添加到问题中。它并没有真正帮助我理解……这是您期望它显示的内容吗?

标签: python regex django


【解决方案1】:

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

我建议使用众多在线正则表达式测试器之一来使用 URL 正则表达式。

【讨论】:

  • 奇怪的是它匹配正则表达式。仔细检查,我的 AJAX 似乎发送了两个调用,第二个看起来像 [01/Jul/2014 22:54:04] "GET /merchant/lookup?za HTTP/1.1" 301 0 我也会更新问题。
猜你喜欢
  • 2012-01-14
  • 1970-01-01
  • 2019-01-18
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
相关资源
最近更新 更多