2012-04-09 54 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