Django教程重新加载模块

时间:2013-07-10 08:43:16

标签: python django

我正在浏览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的情况下是否可以这样做?

4 个答案:

答案 0 :(得分:2)

不,不是。您对.py文件所做的每一次编辑都不会自动重新加载到shell中。如果您想要使用该类型的功能,则必须使用

django-extensions支持您所追求的目标。

答案 1 :(得分:1)

不确定我同意另一个答案。

Python有一个内置函数reload(),来自docs:

  

重新加载以前导入的模块。参数必须是模块对象,因此必须先成功导入。

     

如果您使用外部编辑器编辑了模块源文件并希望在不离开Python解释器的情况下试用新版本,这将非常有用。返回值是模块对象(与模块参数相同)。

但是你必须from polls import models然后models.Poll(因为它必须传递实际的模块而不是类)和models.Choice码。

这样,在不离开shell的情况下,您可以运行reload(models)

编辑1:

如果您无法一直打扰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

不确定这是否会产生任何副作用。