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


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

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


4422
2017-12-02 22:37


起源



答案:


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

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


10
2017-12-02 23:03





你可以复制什么

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/


3
2018-06-16 06:41



就我而言,'ImportError:无法导入名称'setup_environ'显示给我 - LKM


答案:


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

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


10
2017-12-02 23:03





你可以复制什么

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/


3
2018-06-16 06:41



就我而言,'ImportError:无法导入名称'setup_environ'显示给我 - LKM


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


2
2017-12-03 16:03



当您经常在新实例(例如,heroku)上运行时,保存历史记录并不能解决第一个问题,而shell_plus则可以。 - John Lehmann


自动导入常用的包 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


1
2017-08-24 07:30



好消息谢谢! - nehemiah


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

例如,如果您复制了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


0
2017-11-17 19:37