2011-11-23 22 views
15

python manage.py shell と入力してdjangoシェルを起動すると、ipythonシェルが起動します。 Djangoをqtconsoleモードでipythonを起動させることは可能ですか? (すなわち、それはipython qtconsoleを実行させる)qtconsoleモードでipythonでdjangoシェルを起動するには?

Arek

編集: ので、私は、アンドリュー・ウィルキンソンが彼の答えで提案されているものをしようとしている - 元Djangoのシェルコマンドに基づいてコマンドを使用して、私のDjangoアプリケーションを拡張します。私の知る限り、元のバージョンにipythonを開始するコードを理解し、このです:

from django.core.management.base import NoArgsCommand 

class Command(NoArgsCommand): 
    requires_model_validation = False 

    def handle_noargs(self, **options): 
     from IPython.frontend.terminal.embed import TerminalInteractiveShell 
     shell = TerminalInteractiveShell() 
     shell.mainloop() 

qtconsoleモードでipython起動するには、このコードを変更するにはどのように任意のアドバイスはありますか?

第2の編集: 私のプロジェクトのsettings.pyがある場所から 'ipython qtconsole'を開始します(または別の場所から開始する場合はsys.pathを設定します)。この:

import settings 
import django.core.management 
django.core.management.setup_environ(settings) 

、今私は私のモデルをインポートすることができ、すべてのインスタンスをリストなど

+0

まだ簡単なコマンドはないかもしれませんが、確かにそれを可能にする必要があります。 –

+0

'/ usr/local/bin'の' ipython'を 'ipython qtconsole'にエイリアスすることは許されますか? – Unapiedra

+0

@Unapiedra:うまくいくとは思わない。 Djangoは、ipythonをシェルコマンドを使用せずに、Pythonレベルでインポートして呼び出すことによって起動します。 –

答えて

4

私は次のようにシェルスクリプトを作成しました:

/path/to/ipython 
qtconsole --pylab inline -c "run /path/to/my/site/shell.py" 

をあなたはクールなインラインmatplotlibのグラフが必要な場合にのみ--pylab inline一部を必要としています。

そして私は/path/to/my/siteにPythonスクリプトshell.pyを作成しました:私のシェルスクリプトを実行

import os 
working_dir = os.path.dirname(__file__) 
os.chdir(working_dir) 
import settings 
import django.core.management 
django.core.management.setup_environ(settings) 

は、Djangoのシェルのメリットと私にipython qtconsoleを取得します。

+0

ipythonの新しいインストールの後、これはもう私のために働いていません。 ipython qtconsoleは、もはや-cフラグを尊重していないようです。私はトーマスKの答えに切り替えました。 – RickG

7

hereが言うドキュメント:

あなたはむしろない私たちの希望の場合は、 e manage.py、問題ありません。 DJANGO_SETTINGS_MODULE環境変数をmysite.settingsに設定し、manage.pyと同じディレクトリ( ディレクトリがimport mysiteが動作するように ディレクトリがPythonパスにあることを確認してください)から pythonを実行してください。

したがって、その環境変数を設定してからipython qtconsoleを実行するだけで十分です。これを自動的に行うための簡単なスクリプトを作成することができます。

+0

http://stackoverflow.com/q/7866515/213118、あなたもdjangoプロジェクトの場所をパスに追加しなければならず、まだdjangoには設定に関する問題がありました。 dbエンジンを – agend

2

シェルを実行するコードhereを確認することができます。どのシェルを実行するかを設定する場所がないことがわかります。

あなたができることは、このファイルをコピーし、それをshell_qt.pyという名前にして、自分のプロジェクトのmanagement/commandsディレクトリに置きます。それを変更してQTコンソールを実行し、manage.py shell_qtを実行します。

+0

に設定していません。Qtコンソールを実行するコードを変更するにはどうしたらいいですか? – agend

0

あなたはdjango extensionsをインストールしてからDjangoのバージョン1.4以来

python manage.py shell_plus --ipython 
+2

-1。このコマンドは、すべてのモデルがプリロードされた端末でIPythonを起動するだけです。 qtconsoleモードでIPythonを起動しません。だから、これはこの質問に対する正解ではありません。 – pemistahl

1

を実行することができ、django.core.management.setup_environ()の使用が推奨されていません。あなたがDjangoの1.7で作業する場合は、別途実行する必要があり:

In [1]: from django.conf import settings 

In [2]: from mydjangoproject.settings import DATABASES as MYDATABASES 

In [3]: settings.configure(DATABASES=MYDATABASES) 

更新:IPythonのノートブックとQTconsoleの両方が、この(ちょうどあなたのDjangoのプロジェクトディレクトリ内からこれを実行する)であるために機能するソリューション次

In [4]: import django; django.setup() 

django.conf.settings.configure()使用して、プロジェクトのデータベースの設定を指定し、その後、通常の方法で、すべてのモデルにアクセスすることができます。

これらのインポートを自動化する場合は、たとえば次のようにします。ランニングでIPythonプロファイルを作成します。

ipython profile create mydjangoproject 

各プロファイルはstartupというディレクトリが含まれています。任意のPythonスクリプトをそこに置くことができ、それらはIPythonが起動した直後に実行されます。この例では、あなただけおそらくImportError Sを処理するためにtry..except句で囲まれた上記のコードが含まれていたそこにスクリプトを入れ

~/.ipython/profile_<mydjangoproject>/startup/ 

の下でそれを見つけます。あなたは、このような特定のプロファイルでIPythonを開始することができます。

ipython qtconsole --profile=mydjangoproject 

または

ipython notebook --profile=mydjangoproject 
0

私もqtconsoleでDjangoのシェルを開いてみたかったです。プロジェクトのベースディレクトリへ 起動IPython qtconsole、CDをし、実行します:私のための問題を解決manage.pyの内側探し

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 

いけないプロジェクト名に「MyProjectと」を変更することを忘れ。

0

あなたはベースシェルコマンドを拡張し、そのようIPythonQtConsoleAppをインポートするコマンドを作成することができます。

from django.core.management.commands import shell 

class Command(shell.Command): 
    def _ipython(self): 
     """Start IPython Qt console""" 
     from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp 
     app = IPythonQtConsoleApp.instance() 
     app.initialize(argv=[]) 
     app.start() 

そしてちょうどpython manage.py qtshellを使用します。

でコマンド/ yourapp /管理にファイルqtshell.pyを作成します

関連する問題