2012-02-07 59 views
5

在没有runserver的情况下再次更改视图函数并按F5刷新页面后,Django将不会重新加载新视图,而是使用前一个视图。但如果你改变了模板,Django总是使用新模板。是否可以在不重新启动Django的情况下重新加载视图?

那么,有没有办法让Django在每次刷新页面时重新加载视图,我认为对于频繁修改视图功能来说非常方便。

+0

随着时代的发展服务器,Python代码变化通常会自动重新启动服务器。有了模板,它总是只读文件,这是一个不同的故事。 – 2012-02-07 20:13:29

+0

我不确定我了解你的问题。你没有runserver运行你的Django站点?这是否意味着你正在通过另一种方法运行它?运行服务器应该修改项目使用的任何python文件,但这需要几秒钟的时间。 – 2012-02-07 20:14:05

+0

我通过pydev运行它,它不重新加载更改代码。所以每次我改变视图函数时,我都必须再次运行runserver以重新加载更改后的代码。这使得编程缓慢。 – storm 2012-02-07 21:07:35

回答

9

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

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

代码的Apache重装:http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

代码uwsgi重装:http://projects.unbit.it/uwsgi/wiki/TipsAndTricks

+0

我使用eclipse + pydev进行开发。只需使用eclipse运行服务器,并且我发现它没有重新加载视图函数,但重新加载模板文件,所以每次更改代码时,都必须重新启动它。是否有setting.py中的任何设置来启用它? – storm 2012-02-07 20:17:38

+1

这是PyDev的一个问题。据我所知,没有办法让它重新加载(这可能是自从我上次使用它以来已经改变了),我总是通过终端运行runserver而不是。 – 2012-02-07 20:29:33

+1

是的,无论我使用什么IDE,我总是在终端中运行runserver。 – jdi 2012-02-07 20:41:04

2

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

python manage.py runserver

你不需要从Eclipse运行菜单项目的服务器。 在eclipse中进行的任何更改都会在它们制作完成后立即反映出来。

0

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

+0

--noreload是默认放置的,因为它实现重装的方式会导致断点和调试问题 – dalore 2013-02-04 15:25:39

2

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

+0

这可能没有回答原始问题,但它回答了我的问题! – teewuane 2017-01-03 21:27:29

+0

感谢+1,触摸wsgi.py帮助很大。 – 2017-08-12 18:24:31

0

尝试使用gunicorn或nginx的是正在运行的服务器...他们不重新启动代码变更 尝试输入

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

相关问题