我正在浏览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的情况下是否可以这样做?
答案 0 :(得分:2)
不,不是。您对.py文件所做的每一次编辑都不会自动重新加载到shell中。如果您想要使用该类型的功能,则必须使用
django-extensions支持您所追求的目标。
答案 1 :(得分:1)
不确定我同意另一个答案。
Python有一个内置函数reload()
,来自docs:
重新加载以前导入的模块。参数必须是模块对象,因此必须先成功导入。
如果您使用外部编辑器编辑了模块源文件并希望在不离开Python解释器的情况下试用新版本,这将非常有用。返回值是模块对象(与模块参数相同)。
但是你必须from polls import models
然后models.Poll
(因为它必须传递实际的模块而不是类)和models.Choice
码。
这样,在不离开shell的情况下,您可以运行reload(models)
。
如果您无法一直打扰models.
,您也可以输入自己的快捷方式;
from polls import models as pm
pm.Poll
pm.Choice
reload(pm)
答案 2 :(得分:0)
我有时会遇到这种情况。它已经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
答案 3 :(得分:0)
怎么样?
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
不确定这是否会产生任何副作用。