我正在使用Django并一直使用Django shell.令人讨厌的部分是当Django服务器重新加载代码更改时,shell不会,因此每次我对我正在测试的方法进行更改时,我需要退出shell并重新启动它,重新导入所有模块我需要,重新初始化我需要的所有变量等.虽然iPython历史记录在此节省了大量的输入,但这仍然很痛苦.有没有办法让django shell自动重载,就像django开发服务器一样?
我知道reload(),但我导入了很多模型并且通常使用from app.models import *语法,所以reload()没有多大帮助.
我一直在使用这篇文章中描述的方法来设置IPython笔记本,以便与Django很好地配合.该方法的要点是创建一个IPython扩展,它设置DJANGO_SETTINGS_MODULE并在IPython启动时运行django.setup().
扩展的代码是:
def load_ipython_extension(ipython):
# The `ipython` argument is the currently active `InteractiveShell`
# instance, which can be used in any way. This allows you to register
# new magics or aliases, for example.
try:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
import django
django.setup()
except ImportError:
pass
Run Code Online (Sandbox Code Playgroud)
随着最近升级到Jupyter笔记本电脑,这个设置现在已经打破了.我可以通过在笔记本的第一个单元格中添加类似的代码来在Jupyter笔记本中运行Django代码.但是,我无法弄清楚如何让Jupyter自动运行扩展程序,因此我不必为我正在创建的每个笔记本再次执行此操作.
我该怎么办才能让Django和Jupyter玩得很好?
更新: 对于@DarkLight - 我使用Django 1.8.5与Jupyter 1.0.0.我在笔记本中运行的代码是:
import os, sys
sys.path.insert(0, '/path/to/project')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settingsfile")
import django
django.setup()
Run Code Online (Sandbox Code Playgroud)