当我在我的Django项目上运行manage.py shell以查看某些内容时,我总是希望在shell的开头运行常见的导入(例如,我总是想导入我的模型文件。)怎么能我每次运行shell命令时都会自动运行这些命令吗?
第二个相关的问题,当我点击向上箭头时,我得到了“^ A”字符,而不是在manage.py shell(以及我的常规python shell)中的先前运行的命令,我该如何修复它以便加载上一个命令就像在Linux / Unix命令行上一样?
答案 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