在iPython和Django中使用配置文件

3 投票
3 回答
1987 浏览
提问于 2025-04-15 12:36

我在用Django做一个项目,并且使用iPython来进行交互。

我想在启动命令行时,让一些模块自动加载:

python manage.py shell

我把.ipython/ipythonrc文件复制到了项目的根目录,并在文件中添加了:

import_some module_name model1 model2

可是,当我启动命令行时,这些名字并没有被加载。

我哪里做错了呢?

3 个回答

0

shell_plus 是 django-extensions 里的一个命令,它可以自动导入模型,但似乎无法加载 ipython 的配置文件。我做了一些小改动来解决这个问题。

可以用 start_ipython 来启动 ipython 终端,而不是用 embed,并且给它传递一些参数。

我还写了一篇博客,里面有详细的内容,你可以在 这里 找到。

1

BryanWheelock,你的解决方案行不通,因为你的命令行是通过创建一个新的进程得到的,而不是直接与它互动。你需要做的是这样——或者至少这是我常做的。

在你的工作区(也就是你输入 python manage.py shell 的地方),创建一个名为 ipythonrc 的文件。在里面放入以下内容:

include ~/.ipython/ipythonrc

execute from django.contrib.auth.models import User
# .
# .
# .
execute import_some module_name model1 model2

例如,我在我的文件里还添加了以下几行……

# Setup Logging
execute import sys
execute import logging
execute loglevel = logging.DEBUG
execute logging.basicConfig(format="%(levelname)-8s %(asctime)s %(name)s %(message)s", datefmt='%m/%d/%y %H:%M:%S', stream=sys.stdout )
execute log = logging.getLogger("")
execute log.setLevel(loglevel)
execute log.debug("Logging has been initialized from ipythonrc")
execute log.debug("Root Logger has been established - use \"log.LEVEL(MSG)\"")
execute log.setLevel(loglevel)
execute log.debug("log.setlevel(logging.DEBUG)")
execute print ""

这样可以让你在模块中使用日志记录,并保持代码的简洁。希望这对你有帮助。

6

我对ipythonrc不太了解,不过如果你只需要模型的话,可以试试django-extensions。安装完这个之后,你会得到很多新的管理命令,其中有一个叫shell_plus,它会打开一个ipython的会话,并自动加载你所有的模型:

python manage.py shell_plus

撰写回答