【问题标题】:Is it possible to reload the view without restarting Django?是否可以在不重新启动 Django 的情况下重新加载视图?
【发布时间】:2012-02-07 20:07:27
【问题描述】:

在没有runserver的情况下再次更改视图功能后,按F5刷新页面,Django不会重新加载新视图而是使用之前的视图。但是如果你改变了模板,Django 总是使用新的。

那么,有没有办法让Django在每次用户刷新页面时都重新加载视图,我认为这对于开发者经常修改视图功能非常方便。

【问题讨论】:

  • 使用开发服务器,python代码更改一般会自动重启服务器。使用模板时,它始终只是读取文件,所以情况就不同了。
  • 我不确定我是否理解您的问题。您是否在没有 runserver 的情况下运行 Django 站点?这是否意味着您正在通过另一种方法运行它? Runserver 应该获取项目使用的任何 python 文件的更改,不过这需要几秒钟。
  • 我通过 pydev 运行它,它不会重新加载更改代码。所以每次更改视图功能时,我都必须再次运行服务器以重新加载更改后的代码。这使得编程很慢。

标签: django django-views


【解决方案1】:

如果您使用开发服务器 (./manage.py runserver) 运行 django,那么当它检测到任何代码更改时,它总是会重新加载。这比每次请求都重新加载更有效。如果您进行了更改,它会在需要时重新加载。

如果您正在运行生产服务器(nginx、apache 等)并且想要重新加载代码,那么您需要在 wsgi 模块中添加一些内容以检测代码更改。

使用 apache 重新加载代码:http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

使用 uwsgi 重新加载代码:http://projects.unbit.it/uwsgi/wiki/TipsAndTricks

【讨论】:

  • 我是用eclipse + pydev来开发的,只是用eclipse来runserver,发现并没有重新加载视图函数,而是重新加载了模板文件,所以每次改代码,我必须重新启动它。 setting.py 中是否有任何设置可以启用它?
  • 这是 PyDev 的问题。据我所知,没有办法让它重新加载(自从我上次使用它以来这可能已经改变),我总是通过终端运行 runserver。
  • 是的,无论我使用什么 IDE,我总是在终端中运行 runserver。
  • 是的,你们启发了我,这是 pydev 中的一个问题。
【解决方案2】:

这是 PyDev 的一个已知问题。我建议从终端/cmd 运行服务器。 cd 到存在 manage.py 的项目目录并使用运行服务器

python manage.py runserver

您不需要从 Eclipse 菜单运行项目。 在 eclipse 中所做的任何更改都会在更改后立即反映出来。

【讨论】:

    【解决方案3】:

    如果您在守护程序模式下将 Django 作为 WSGI 应用程序运行,您只需触摸您站点的 wsgi.py,它将在下次有请求时重新加载应用程序。 (所以不需要任何特殊选项)。

    【讨论】:

    • 这可能没有回答原始问题,但它回答了我的问题!
    • 感谢 +1,触摸 wsgi.py 有很大帮助。
    【解决方案4】:

    我注意到这是 pyDev 运行配置中的一个设置。我想知道为什么,但似乎 --noreload 是默认配置的。所以我编辑了运行设置的参数,现在服务器在编辑视图时也在重新加载。

    【讨论】:

    • --noreload 是默认放置的,因为它实现重新加载的方式可能会导致断点和调试问题
    【解决方案5】:

    尝试使用 gunicorn 或 nginx 作为运行服务器...它们不会在代码更改时重新启动 尝试输入

    gunicorn --bind 0.0.0.0:8080 app.wsgi:application

    【讨论】:

      猜你喜欢
      • 2016-01-30
      • 2012-10-03
      • 2012-05-13
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2011-06-18
      • 2023-04-06
      相关资源
      最近更新 更多