2011-11-23 51 views
15

当我通过输入python manage.py shell 启动django shell时,启动了ipython shell。是否有可能让Django以qtconsole模式启动ipython? (即使其运行ipython qtconsole如何在qtconsole模式下使用ipython启动django shell?

Arek

编辑: 所以我想什么安德鲁威尔金森在他的回答表明 - 延长我的Django应用程序与基于原有的Django shell命令的命令。据我理解代码,在原来的版本开始IPython的是这样的:

from django.core.management.base import NoArgsCommand 

class Command(NoArgsCommand): 
    requires_model_validation = False 

    def handle_noargs(self, **options): 
     from IPython.frontend.terminal.embed import TerminalInteractiveShell 
     shell = TerminalInteractiveShell() 
     shell.mainloop() 

任何意见如何改变这种代码qtconsole模式启动IPython的?

秒编辑: 到目前为止我发现和工作的是 - 从我的项目的settings.py位置开始'ipython qtconsole'(或者如果从不同位置开始设置sys.path),然后执行这样的:

import settings 
import django.core.management 
django.core.management.setup_environ(settings) 

,现在我可以导入我的模型,列出所有实例等

+0

可能还没有一个简单的命令,但它当然应该可以做到这一点。 –

+0

如果你在'/ usr/local/bin'中将'ipython'别名为'ipython qtconsole',那么你可以接受吗? – Unapiedra

+0

@Unapiedra:我不认为这会奏效。 Django通过导入并在Python级别调用它来启动ipython,而不使用shell命令。 –

回答

4

我创建了下面的shell脚本:

/path/to/ipython 
qtconsole --pylab inline -c "run /path/to/my/site/shell.py" 

,如果你想酷在线matplotlib图形您只需要--pylab inline部分。

我创建了一个python脚本shell.py/path/to/my/site有:

import os 
working_dir = os.path.dirname(__file__) 
os.chdir(working_dir) 
import settings 
import django.core.management 
django.core.management.setup_environ(settings) 

运行我的shell脚本,让我的IPython的qtconsole与Django的外壳的好处。

+0

新安装ipython后,这不再适用于我。 ipython qtconsole似乎不再遵循-c标志。我已经转向托马斯K的回答。 – RickG

7

该文档here说:

如果你不能再喝了我们e manage.py,没问题。只需将 DJANGO_SETTINGS_MODULE环境变量设置为mysite.settings,并从同一目录下运行 python manage.py(或确保 目录位于Python路径中,以便导入mysite工作)。

所以它应该足以设置该环境变量,然后运行ipython qtconsole。你可以做一个简单的脚本来自动为你做这个。

+0

http://stackoverflow.com/q/7866515/213118,所以你必须将你的django项目位置添加到路径中,并且django仍然有一些设置问题 - 当我想要列出模型中的所有对象时它说我没有设置数据库引擎 – agend

2

您可以检查运行shell here的代码。你会看到没有配置shell运行的地方。

你可以做的是拷贝这个文件,将它重命名为shell_qt.py,并将它放在你自己项目的管理/命令目录中。将其更改为运行QT控制台,然后您可以运行manage.py shell_qt

+0

,我如何更改代码来运行qt控制台 - 你能帮我吗? – agend

0

您可以安装django extensions,然后运行

python manage.py shell_plus --ipython 
+2

-1。该命令只需在预装所有模型的终端中启动IPython。它不会以qtconsole模式启动IPython。所以这不是这个问题的正确答案。 – pemistahl

1

由于Django的1.4版本中,django.core.management.setup_environ()用法已过时。这两个IPython的笔记本电脑工作和QTconsole是这样的(只是从你的Django项目目录中执行此):A液

In [1]: from django.conf import settings 

In [2]: from mydjangoproject.settings import DATABASES as MYDATABASES 

In [3]: settings.configure(DATABASES=MYDATABASES) 

更新:如果你使用Django 1.7工作,您还需要执行以下:

In [4]: import django; django.setup() 

使用django.conf.settings.configure(),您指定项目的数据库设置,然后就可以访问自己的所有车型在通常的方式。

如果您想自动执行这些导入,您可以通过运行创建一个IPython的轮廓:

ipython profile create mydjangoproject 

每个配置文件包含一个名为startup目录。你可以在其中放入任意的Python脚本,并在IPython启动后立即执行它们。在这个例子中,你会发现它在

~/.ipython/profile_<mydjangoproject>/startup/ 

只要把剧本中有包含上述代码,可能是由try..except条款封闭处理ImportError秒。然后,您可以像这样指定的配置文件启动的IPython:

ipython qtconsole --profile=mydjangoproject 

ipython notebook --profile=mydjangoproject 
0

我也想在qtconsole打开Django的壳。展望内manage.py解决这个问题对我来说: 启动的IPython qtconsole,cd到项目的基本目录,然后运行:

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 

不要忘记“MyProject的”更改为您的项目名称。

0

您可以创建一个扩展底座shell命令和进口IPythonQtConsoleApp像这样的命令:

from django.core.management.commands import shell 

class Command(shell.Command): 
    def _ipython(self): 
     """Start IPython Qt console""" 
     from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp 
     app = IPythonQtConsoleApp.instance() 
     app.initialize(argv=[]) 
     app.start() 

就用python manage.py qtshell

创建yourapp /管理文件qtshell.py与/命令

相关问题