Как предварительно загрузить импорт в команду командной оболочки 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