如何在qtconsole模式下使用ipython启动django shell?

15 投票
8 回答
6089 浏览
提问于 2025-04-17 06:54

当我通过输入 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 个回答

2

你可以在这里查看运行 shell 的代码 这里。你会发现没有地方可以设置要运行哪个 shell。

你可以做的是复制这个文件,把它改名为 shell_qt.py,然后放到你自己项目的 management/commands 目录下。接着修改它,让它运行 QT 控制台,然后你就可以运行 manage.py shell_qt 了。

7

文档这里提到:

如果你不想使用manage.py,也没关系。只需将DJANGO_SETTINGS_MODULE这个环境变量设置为mysite.settings,然后在manage.py所在的同一目录下运行python(或者确保这个目录在Python的路径中,这样就可以正常导入mysite)。

所以,只要设置好这个环境变量,然后运行ipython qtconsole就可以了。你还可以写一个简单的脚本,让这个过程自动化。

4

我写了一个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的好处了。

撰写回答