【问题标题】:Django URLs not matching with GET variablesDjango URL 与 GET 变量不匹配
【发布时间】:2012-04-09 21:05:45
【问题描述】:

我有以下 django 网址:

url(r'^companies/$', 'companies', name='companies'),

如果我去http://localhost:8000/companies/ 它工作得很好。但是,如果我尝试将任何 GET 变量添加到 URL django 会引发 404。例如,如果我转到 http://localhost:8000/companies/?c=1 django 会引发 404。奇怪的是,在 404 上会显示:

当前 URL companies/ 与其中任何一个都不匹配。

为什么我无法将 GET 变量传递给我的 URL?

我正在使用 django 1.4。

公司视图定义如下:

def companies(request):

它不应该接受任何额外的参数,因为它们是 GET 变量,而不是 URL 参数——对吗?我发誓我已经这样做了数百次,而且它总是有效......

【问题讨论】:

  • 也许您的companies 函数不接受任何参数?请出示签名
  • 已添加到问题中。只需def companies(request):

标签: django


【解决方案1】:

好的。弄清楚是什么导致了这种非常奇怪的行为。我有一个调用resolve(request.get_full_path()) 的自定义上下文处理器。显然,如果 URL 中有任何 GET 变量,则会导致 404。很奇怪。

【讨论】:

  • 显然这是一个已知的issueresolve(request.path) 有效,并修复了 404。
  • 一点也不奇怪。 request.get_full_path() 返回 URL 路径加上查询字符串。但是,resolve 只需要一个简单的 URL 路径,因此它会尝试查找与您传入的字符串匹配的 urlpattern,包括 查询字符串。显然,不存在这样的 urlpattern,所以你得到一个 404。正如你所确定的,你需要使用request.path,因为它不包括查询字符串。
  • 这是有道理的。我想奇怪的是异常的行为方式-它没有给我在引发 Http404 时发生的裸露的 404,也没有给我回溯。它只是给了我正常的 404,就好像我的 urls.conf 中的一个 URL 不匹配一样——它显然是匹配的。
  • 再一次,情况确实如此。它不匹配任何东西(由于查询字符串),所以它给了你一个标准的 404,就像你试图去/some/page/that/does/not/exist/一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多