如何在qtconsole模式下使用ipython启动django shell?
当我通过输入 python manage.py shell
启动 Django 的命令行时,实际上是启动了 ipython 的命令行。请问有没有办法让 Django 在 qtconsole 模式下启动 ipython?也就是说,让它运行 ipython qtconsole
。
Arek
编辑:我正在尝试 Andrew Wilkinson 在他的回答中建议的方法——扩展我的 Django 应用,添加一个基于原始 Django 命令行的命令。根据我的理解,启动原始版本 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)
现在我可以导入我的模型,列出所有实例等等。
8 个回答
你可以在这里查看运行 shell 的代码 这里。你会发现没有地方可以设置要运行哪个 shell。
你可以做的是复制这个文件,把它改名为 shell_qt.py,然后放到你自己项目的 management/commands 目录下。接着修改它,让它运行 QT 控制台,然后你就可以运行 manage.py shell_qt
了。
文档这里提到:
如果你不想使用manage.py,也没关系。只需将DJANGO_SETTINGS_MODULE这个环境变量设置为mysite.settings,然后在manage.py所在的同一目录下运行python(或者确保这个目录在Python的路径中,这样就可以正常导入mysite)。
所以,只要设置好这个环境变量,然后运行ipython qtconsole
就可以了。你还可以写一个简单的脚本,让这个过程自动化。
我写了一个shell脚本,内容如下:
/path/to/ipython
qtconsole --pylab inline -c "run /path/to/my/site/shell.py"
如果你想要在程序里直接显示好看的matplotlib图表,那么只需要加上--pylab inline
这一部分。
我还在/path/to/my/site
这个路径下创建了一个python脚本,名字叫shell.py
,内容是:
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 shell的好处了。