2013-04-07 46 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