【发布时间】:2013-07-10 08:43:15
【问题描述】:
我正在学习 Django 教程。
编辑一个类后,它会说:
Save these changes and start a new Python interactive shell by running python manage.py shell again:
>>> from polls.models import Poll, Choice
是否可以在不退出 shell 的情况下做到这一点?
【问题讨论】:
我正在学习 Django 教程。
编辑一个类后,它会说:
Save these changes and start a new Python interactive shell by running python manage.py shell again:
>>> from polls.models import Poll, Choice
是否可以在不退出 shell 的情况下做到这一点?
【问题讨论】:
不,不是。您对 .py 文件所做的每次编辑都不会自动重新加载到 shell 中。如果你想拥有这种类型的功能,你将不得不使用
django-extensions 支持你所追求的。
【讨论】:
不确定我是否同意其他答案。
Python 有一个内置函数 reload(),来自文档:
重新加载以前导入的模块。参数必须是模块对象,所以之前必须成功导入。
如果您已经使用外部编辑器编辑了模块源文件并且想要在不离开 Python 解释器的情况下试用新版本,这将非常有用。返回值为模块对象(与模块参数相同)。
但是您必须在代码中执行from polls import models 然后models.Poll(因为它必须传递实际的模块 而不是类)和models.Choice。
这样,您无需离开外壳就可以运行reload(models)。
如果你懒得一直输入models.,你也可以输入自己的快捷方式;
from polls import models as pm
pm.Poll
pm.Choice
reload(pm)
【讨论】:
我有时会遇到这种情况。而且已经是discussed on SO了。
是的,reload() 有效。但同时也不是很方便的选择。
>>> from polls.models import Poll, Choice
.... #Some changes are done to your polls/models.py file and saved
>>> Poll #gives you old model
>>> reload(polls.models) #Reload works at module level!
>>> from polls.models import Poll, Choice # import again from the reloaded module
>>> Poll #gives you new model
【讨论】:
怎么样?
def reload_all():
import sys
module = type(sys) # this type has no name!
for m in sys.modules.values():
if isinstance(m, module):
try:
reload(m)
except:
pass
但不确定这是否会产生任何副作用。
【讨论】: