如何将导入预加载到Django的manage.py shell命令中?

时间:2009-12-02 22:37:19

标签: django django-manage.py

当我在我的Django项目上运行manage.py shell以查看某些内容时,我总是希望在shell的开头运行常见的导入(例如,我总是想导入我的模型文件。)怎么能我每次运行shell命令时都会自动运行这些命令吗?

第二个相关的问题,当我点击向上箭头时,我得到了“^ A”字符,而不是在manage.py shell(以及我的常规python shell)中的先前运行的命令,我该如何修复它以便加载上一个命令就像在Linux / Unix命令行上一样?

5 个答案:

答案 0 :(得分:10)

对于第一个问题,请查看django-extensions项目提供的manage.py shell_plus命令。它将在shell启动时加载所有模型文件。该项目还有其他一些有用的技巧,因此绝对值得一试。

对于第二个问题,我只能猜测你需要安装readline

答案 1 :(得分:3)

你可以复制什么

python manage.py shell

只做:

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

您将为该脚本的其余部分设置环境。还有其他一些方法可以做到这一点:http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/

答案 2 :(得分:2)

可以解决您的两个问题的一件事是ipython。 ipython存储以前的执行,它也可以让你完成。

答案 3 :(得分:1)

python manage.py shell_plus

中自动导入常用的包

示例:

#  local_settings
SHELL_PLUS_PRE_IMPORTS = (
    ('<app_name>.models', '*'),
    ('<app_name>.forms', '*'),
    ('<app_name>.views', '*'),
    ('django.core.urlresolvers', '*'),
    ('django.db', 'connection'),
    ('django.db', 'reset_queries'),
)

SHELL_PLUS_DONT_LOAD = ['<app_name>', '<app_name>']

<强>参考:
https://github.com/django-extensions/django-extensions/blob/master/docs/shell_plus.rst

答案 4 :(得分:0)

可以使用django-extesions应用程序中提供的shell_plus命令作为起点,在django shell中添加额外的东西,并通过添加您想要提供给'imported_objects'字典的任何内容来修改它。 / p>

例如,如果您复制了shell_plus.py文件并在末尾添加了这两行:

# .......
alist = range(1000)
imported_objects['alist'] = alist
code.interact(local=imported_objects)  # <-- this is the original final line

使用新文件运行shell时,'alist'引用将可用。 我在这里放了一个更长的例子:http://www.michelepasin.org/techblog/?p=1012