我正在浏览 Django 教程。
编辑类后,它说:
Save these changes and start a new Python interactive shell by running python manage.py shell again:
>>> from polls.models import Poll, Choice
是否可以在不退出外壳的情况下做到这一点?
不,这不对。您对 .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)
我有时也遇到过这种情况。它已经在 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
不过,不确定这是否会产生任何副作用。