2012-04-09 55 views
7

我有以下Django的URL匹配。但是,如果我尝试添加任何GET变量添加到URL的Django提出了404。例如,如果我去http://localhost:8000/companies/?c=1 Django的提出了404什么是奇怪的是,在404,它说:Django的网址无法与GET变量

当前的URL ,companies/,没有匹配任何这些。

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

我正在使用django 1.4。

公司的看法是这样定义:

def companies(request): 

它不应该接受任何额外的参数,因为它们是GET变量,而非URL参数 - 正确的?我发誓我已经完成了这个数百次,它总是可以工作...

+0

也许你的'公司'功能不接受任何参数?请给我们签名 – 2012-04-09 21:11:16

+0

加入问题。只是'def公司(请求):' – dgel 2012-04-09 21:16:06

回答

7

好的。找出造成这种非常奇怪行为的原因。我有一个自定义上下文处理器,调用resolve(request.get_full_path())。显然,如果URL中有任何GET变量,就会导致404错误。很奇怪。

+0

其中'resolve'来自'django.core.urlresolvers' – dgel 2012-04-09 21:22:16

+2

显然这是一个已知的[issue](https://code.djangoproject.com/ticket/13855)。 'resolve(request.path)'工作,并修复404的。 – dgel 2012-04-09 21:32:00

+2

这并不奇怪。 'request.get_full_path()'返回URL路径*加*查询字符串。然而,'resolve'只需要一个简单的URL路径,所以它试图找到一个与你传入的字符串*包括查询字符串相匹配的urlpattern。显然,不存在这样的urlpattern,所以你得到了404。如你所确定的,你需要使用'request.path',因为它不包含查询字符串。 – 2012-04-09 21:57:11