【问题标题】:Django Tutorial Reload ModuleDjango 教程重载模块
【发布时间】: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 的情况下做到这一点?

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    django-extensions 支持你所追求的。

    【讨论】:

      【解决方案2】:

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

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

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

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

      但是您必须在代码中执行from polls import models 然后models.Poll(因为它必须传递实际的模块 而不是类)和models.Choice

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

      编辑 1:

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

      from polls import models as pm
      pm.Poll
      pm.Choice
      
      reload(pm)
      

      【讨论】:

        【解决方案3】:

        我有时会遇到这种情况。而且已经是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
        

        【讨论】:

          【解决方案4】:

          怎么样?

          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
          

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

          【讨论】:

            猜你喜欢
            • 2014-05-19
            • 1970-01-01
            • 2014-12-11
            • 1970-01-01
            • 2021-01-02
            • 2019-07-19
            • 1970-01-01
            相关资源
            最近更新 更多