有一个命令可以调用Django的shell:
python manage.py shell
我想创建一个BASH别名,它将:
python manage.py shell
print 'foo'
类似于-i选项的内容:python -i /usr/bin/print_foo.py
,但manage.py shell
这样做的原因是调试过程加快了速度。因此,我想在单独的PY文件中进行,而不是导入所有相关模型并分配变量。因此,每次我启动manage.py shell
时,我都会掌握所有工具。
编辑:使用python manage.py shell < /usr/bin/print_foo.py
几乎可以解决问题。然而,终端关闭..如果有办法让它保持打开。
答案 0 :(得分:2)
我也与此作斗争,< test.py
关闭了shell,shell_plus
除了自动加载模型之外没有增加太多,不加载你想要调试的代码
但是我可以这样做:如果没有从Django环境运行,我会创建一个初始化Django的test.py
,并使用python -i test.py
运行它
基本思想是不使用manage.py shell
if __name__ == '__main__':
# This will run e.g. from python -i test.py, but will be skipped if from Django
import django # 1.7
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
# Your regular Django stuff here
# Init your vars etc and prepare values to debug
# The Python prompt will remain active here so you can work on it
另一种不太自动化的解决方案是,如果您在IPython中,则调用execfile('test.py')
或%run test.py
,
亲你可以重新加载test.py
模块而不离开shell(更快并保留上下文),con是你必须在shell打开时手动加载它
答案 1 :(得分:2)
您可以使用以下简单的shell脚本:
#!/bin/bash
export PYTHONSTARTUP="$1" # Set the startup script python will run when it start.
shift # Remove the first argument, don't want to pass that.
python manage.py shell "$@" # Run manage.py with the startup script.
只需提供您想要首先运行的python脚本作为脚本的第一个参数。所有其他参数都直接传递给manage.py
。对$PYTHONSTARTUP
的更改不会影响shell中的环境。
答案 2 :(得分:1)
不是直接的答案,但Django Extensions(Github,Docs)shell_plus
可能对此感兴趣。 (该软件包有许多有用的工具,因此在许多情况下它是一种有价值的依赖。)
自动导入应用的模型。要配置进一步的导入,请参阅additional imports部分。
如果要使用shell_plus
从任意python模块自动执行代码,可以使用SHELL_PLUS_PRE_IMPORTS
和SHELL_PLUS_POST_IMPORTS
设置。任何在那里配置的python模块都会在自动导入Django的app模型之前或之后运行a)。