Django URL与GET变量不匹配

dge*_*gel 7 django

我有以下django网址:

url(r'^companies/$', 'companies', name='companies'),
Run Code Online (Sandbox Code Playgroud)

如果我去http://localhost:8000/companies/它完美的工作.但是,如果我尝试向URL添加任何GET变量,则django会引发404.例如,如果我去http://localhost:8000/companies/?c=1django会引发404.有什么奇怪的,就是在404上它说:

当前的URL companies/与任何这些都不匹配.

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

我正在使用django 1.4.

公司视图定义如下:

def companies(request):
Run Code Online (Sandbox Code Playgroud)

它不应该接受任何其他参数,因为它们是GET变量,而不是URL参数 - 正确吗?我发誓我已经完成了数百次,它总是有效......

dge*_*gel 7

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

  • 显然这是一个已知的[问题](https://code.djangoproject.com/ticket/13855).`resolve(request.path)`有效,并修复了404. (3认同)
  • 这一点都不奇怪.`request.get_full_path()`返回URL路径*加*查询字符串.但是,`resolve`只需要一个简单的URL路径,因此它会尝试查找与您传入的字符串匹配的urlpattern*包括*查询字符串.显然,没有这样的urlpattern,所以你得到一个404.如你所知,你需要使用`request.path`,因为它不包括查询字符串. (2认同)