こんばんは、エンジニアの眠れない夜です。
Djangoの開発中にPythonのスクリプトを書きたいことがありますよね?
そんな時に便利なのがiPython/ Jupyter notebookです。普段から利用している人も多いと思います。
DjangoでiPython/ Jupyter notebookを利用するためには初期設定が必要です。
ここではDjangoでiPython/ Jupyter notebookを使う方法をご紹介します。
iPython/ Jupyter notebookをDjangoで使うための初期設定
まずは django-extensions をインストールします。
ドキュメントはこちら→django-extensions ドキュメント
pip install django-extensions
Djangoの settingsに ‘django-extensions’を加えます。
INSTALLED_APPS += ['django_extensions']
iPython/ Jupyter notebookを起動するにはDjangoのプロジェクトのホームディレクトリで下記を実行するとiPython/ Jupyter notebookが起動します。
python manage.py shell_plus --notebook
iPython/ Jupyter notebookが起動したら一番初めに下記のコードをコピーアンドペーストして実行します。MYPROJECT にはプロジェクトのホームディレクトリを指定してください。
import os, sys, django
MYPROJECT = '/path/to/my_project' #プロジェクトの絶対パスを指定
sys.path.insert(0, MYPROJECT) #プロジェクトのパスを通す
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "local_settings.py") #settingファイルのパスを通す
django.setup()
from app.models import Foobar
Foobar.objects.all()
Djangoのモデルを使いたいときはviews.pyなどでモデルを読み込むのと同じ要領でインポートします。
from アプリ名.models import モデル名
これでDjangoのモデルなどを活用してスクリプトを書くことができますね^^
追記
後、日違うプロジェクトで上記の方法でうまくいかない事があったので追記します。
そして、下記の3行で十分ということが分かりました。
import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings")#settingファイルのパスを通す
django.setup()
website.settings
のwebsite
の部分は使用中のプロジェクト名に置き換えてください。
※ 開発環境によってはプロジェクトのルートディレクトリが異なることがあるので、プロジェクトのパスを通してください。
MYPROJECT = '/path/to/my_project' #プロジェクトの絶対パスを指定
sys.path.insert(0, MYPROJECT) #プロジェクトのパスを通す
本番とテストで設定を変更する場合
settingsファイルをローカルと本番環境で使い分けたいときは local_settings
などを作成して、そちらを指定してください。
ポイント
2行目で指定するsettingsのファイルのパスが通っていないことが原因で、「そんなモジュールありません」(ModuleNotFoundError: No module named ‘xxx.settings’)とエラーが出ます。
それを2行目で設定してあげれば解決です!
※ django関係のモジュールのimportより先に上記のコード入れてください。順番が逆だとdjangoの設定ができていないのでモデルのimportで同じエラーが出ます。
たったこれだけのことです!
これでもう同じところではつまづきませんね^^
コメントを残す