Django URL与GET变量不匹配
我有以下django URL:Django URL与GET变量不匹配,django,Django,我有以下django URL: url(r'^companies/$', 'companies', name='companies'), 如果我转到http://localhost:8000/companies/它工作得非常好。但是,如果我尝试向URL添加任何GET变量,django将引发404错误。例如,如果我转到http://localhost:8000/companies/?c=1django提出了一个404。奇怪的是,404上写着: 当前URL,companys/,与其中任何一个都不匹
url(r'^companies/$', 'companies', name='companies'),
如果我转到http://localhost:8000/companies/
它工作得非常好。但是,如果我尝试向URL添加任何GET变量,django将引发404错误。例如,如果我转到http://localhost:8000/companies/?c=1
django提出了一个404。奇怪的是,404上写着:
当前URL,companys/
,与其中任何一个都不匹配
为什么我不能将GET变量传递到我的URL
我正在使用django 1.4
“公司”视图的定义如下:
def companies(request):
它不应该接受任何额外的参数,因为它们是GET变量,而不是URL参数-正确吗?我发誓我已经做了几百次了,而且一直都很有效…好吧。找出了导致这种奇怪行为的原因。我有一个自定义上下文处理器,它正在调用
resolve(request.get\u full\u path())
。显然,如果URL中有任何GET变量,则会导致404。非常奇怪。也许您的公司
函数不接受任何参数?出示签名,请回答问题。只是def公司(请求):
显然这是一个已知的问题<代码>解析(request.path)可以工作,并修复404。这一点都不奇怪<代码>请求。获取完整路径()返回URL路径和查询字符串。但是,resolve
只需要一个简单的URL路径,因此它会尝试查找与您传入的字符串(包括查询字符串)匹配的URL模式。显然,不存在这样的urlpattern,所以您得到了404。正如您所确定的,您需要使用request.path
,因为它不包括查询字符串。这很有意义。我想奇怪的是异常的行为——它没有告诉我如果你抛出Http404会发生什么,也没有给我回溯。它只是给了我一个普通的404,就好像我的URL.conf中的一个URL不匹配一样——很明显是这样的。它与任何内容都不匹配(由于查询字符串),因此它给了您一个标准404,就像您试图转到/some/page/that/does/not/exist/
。