2012-04-11 52 views
2

這個讓我撓頭。我有一個可以處理表單(登錄/註冊)的視圖的應用程序,然後根據輸入返回各種HttpResponseRedirect()。所有這些重定向都包含reverse()查找,並將適當的功能列爲字符串。並且每個函數在urls.py中都有對應的urlpattern突然間所有的HttpResponseRedirect(reverse())都給出語法錯誤

一切都很好,直到今天上午。

現在,每當我提交表單,Django的讓我對一個不存在的行語法錯誤:

SyntaxError at /logout/ 
invalid syntax (views.py, line 399) 

(該文件只有354線)

當我向下滾動一下在回溯處,突出顯示的行總是與return HttpResponseRedirect(reverse('app.views.func'))

由於這些令人困惑的錯誤消息,我甚至不確定問題是否與HttpResponseRedirect(reverse())確實有關。我幾天之內沒有觸及任何代碼,所以我不確定爲什麼它會突然開始拋出這樣的奇怪錯誤。

任何幫助調試這將非常感謝!

+0

你使用的是django的認證系統嗎? – 2012-04-11 17:54:37

+0

不存在的行?嘗試刪除您編譯的python文件。嘗試'find/my/project/-name * .pyc | xargs rm' – 2012-04-11 17:54:47

+1

聽起來像你的腳本沒有訪問你打算訪問的文件。嘗試將'views.py'重命名爲'_views.py'並檢查Django是否抱怨丟失的文件(也許在另一個目錄中有不同的文件或其他東西)。 – bitmask 2012-04-11 17:55:02

回答

3

我終於想通了consulting the docs for the reverse()函數。

當你調用reverse()時,django首先導入你項目的URLConf文件,然後導入你的URLconf中聲明的每一個視圖模塊。我的問題是,我正在研究一個新的,完全無關的視圖,它有一個語法錯誤(在399行!)。

因此,即使我沒有查看任何新視圖的頁面,但由於reverse()的工作原理,我的舊視圖仍然因語法錯誤而絆倒。

the docs

確保你的觀點是正確的。作爲確定哪個URL名稱映射到哪些模式的一部分,reverse()函數必須導入URLconf文件的所有 並檢查每個視圖的名稱。這涉及導入每個視圖函數的 。如果在導入 任何視圖函數時出現任何錯誤,即使該視圖函數不是您想要反轉的視圖函數,也會導致reverse()引發錯誤 。

確保您在URLconf文件中引用的任何視圖都存在,並且 可以正確導入。不要包含參考視圖 的行,因爲這些視圖不可導入。