2012-02-07 108 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

相關問題