2

我正在浏览 Django 教程。

编辑类后,它说:

Save these changes and start a new Python interactive shell by running python manage.py shell again:

>>> from polls.models import Poll, Choice

是否可以在不退出外壳的情况下做到这一点?

4

4 回答 4

2

不,这不对。您对 .py 文件所做的每次编辑都不会自动重新加载到 shell 中。如果您想拥有这种类型的功能,您将不得不使用

django-extensions支持你所追求的。

于 2013-07-10T08:48:37.020 回答
1

不确定我是否同意其他答案。

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

重新加载以前导入的模块。参数必须是一个模块对象,所以它必须之前已经成功导入。

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

但是,您必须这样做from polls import modelsmodels.Poll因为它必须传递实际的模块而不是类)并models.Choice在您的代码中。

这样,您无需离开外壳就可以运行reload(models).

编辑1:

如果你懒得models.一直打字,你也可以在自己的快捷方式中输入;

from polls import models as pm
pm.Poll
pm.Choice

reload(pm)
于 2013-07-10T09:24:02.607 回答
0

我有时也遇到过这种情况。它已经在 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
于 2013-07-10T10:44:35.657 回答
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

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

于 2013-07-10T10:54:34.443 回答