Как предварительно загрузить импорт в команду командной оболочки Django manage.py?
Когда я запускаю оболочку manage.py в моем проекте Django, чтобы заглянуть в что-то, есть общие импорты, которые я всегда хочу запускать в начале оболочки (например, я всегда хочу импортировать файлы моей модели.) Как можно Я запускаю их автоматически каждый раз, когда запускаю команду оболочки?
Второй связанный вопрос, когда я нажимаю стрелку вверх, я получаю символ "^ A" вместо ранее выполняемой команды в оболочке manage.py(и в моей обычной оболочке python), как я могу это исправить, чтобы она загружалась предыдущей команде, например, в командной строке Linux/Unix?
Ответы
Ответ 1
Для первого вопроса рассмотрите команду manage.py shell_plus
, предоставленную django-extensions. Он загрузит все ваши файлы модели при запуске оболочки. Проект также имеет массу полезных трюков, поэтому он определенно стоит проверить.
Во втором вопросе я могу только предположить, что вам нужно установить readline
.
Ответ 2
вы можете реплицировать то, что
python manage.py shell
делает, просто делая:
from django.core.management import setup_environ
from mysite import settings
setup_environ(settings)
и у вас будет вся окружающая среда для остальной части этого script. Есть и другие способы сделать это здесь: http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/
Ответ 3
Единственная вещь, которая может решить обе проблемы: ipython. ipython хранит предыдущие исполнения, и он также может дать вам завершение.
Ответ 4
Автоматический импорт часто используемых пакетов в 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
Ответ 5
Добавление дополнительного материала в оболочку django может быть выполнено с использованием в качестве отправной точки команды shell_plus, представленной в django-extesions, и изменения добавив все, что вы хотите сделать доступным для словаря "imported_объектов".
Например, если вы дублируете файл shell_plus.py и добавляете эти две строки в конец:
# .......
alist = range(1000)
imported_objects['alist'] = alist
code.interact(local=imported_objects) # <-- this is the original final line
При запуске оболочки с использованием нового файла будет доступна ссылка "alist".
Здесь я приведу более длинный пример: http://www.michelepasin.org/techblog/?p=1012