2013-04-07 48 views
5

我正在運行Django 1.5.1,Python 2.7.2和IPython 0.13.2。如果我從我的Django項目目錄內做「蟒蛇./manage.py殼」,我得到以下錯誤:使用Django 1.5和IPython獲取NameError

from django import forms 
class CommentForm(forms.Form): 
    name = forms.CharField() 

NameError: name 'forms' is not defined. 

我知道被定義爲,我可以看到它時,它做「目錄(形式)的形式」。我注意到這個錯誤只發生在我在REPL中運行iPython的時候。如果我啓動REPL並只使用普通的舊Python解釋器,則不會發生錯誤。

有其他人遇到過這個問題嗎?如果是這樣,你知道它爲什麼會發生,是否有解決方法嗎?

我應該補充一點,我在過去在REPL中創建類時遇到了問題,直到我在類中創建了一個元類並定義了一個「app_label」變量。這在這種情況下並沒有什麼不同。

謝謝。

+0

你有沒有在你的項目文件夾中有任何機會命名'forms.py'的文件? – eandersson 2013-04-07 20:55:03

+0

Django習慣於吞噬合法的異常並重新提高通用異常。我會看看代碼,甚至修改它以查看實際引發的異常可能是什麼。 – aychedee 2013-04-07 20:58:06

+0

eandersson,不,我沒有在項目中的forms.py文件,但添加一個沒有解決問題。感謝您的建議。 – William 2013-04-07 21:33:31

回答

8

django 1.5無法正確啓動IPython。這是fixed in master,但修復程序沒有反向移植到1.5.1。如果您手動將該修補程序應用於core/management/commands/shell.py,則IPython應按預期工作。

+1

我猴子補丁shell.py並解決了這個問題。非常感謝你。 – William 2013-04-07 22:41:12

+0

非常感謝你!其他猴子修補程序的注意事項:至少在我的iPython版本中,我在「前端」軟件包中收到了棄用警告。您可以通過簡單地刪除「前端」圖層來使該警告消失:從IPython.terminal.ipapp導入TerminalIPythonApp而不是從IPython.frontend.terminal.ipapp導入TerminalIPythonApp – 2014-02-04 20:14:46