2013-10-15 90 views
0

這裏的問題:爲什麼更改.py文件不會影響django網站的行爲?

在Django中的一個views.py我有以下代碼:

from kml_generator import KML_generator 

@login_required(login_url='/dev/login') 
def search(request): 

    if request.POST: 
     result,SF=Validate(request, Activities) 
     val=result.values('id')   
     KML_generator(result1=val,user=request.user) 

它基本上是進口模塊kml_generator,並從那裏調用類KML_generator。此類生成.kml文件,然後顯示在OpenLayers上。它的工作原理應該如此,但我想改變它。

現在:

爲什麼當我改變模塊kml_generator代碼,裏面不影響行爲?我用盡了一切我甚至把有錯誤,它仍然有效般的魅力....

所以這裏的問題:

如何改變呢? django裏面有一些'build','compile'嗎?我是否需要調用它來影響代碼?

PS。這一切都在阿帕奇上使用wsgi.py

PS2。好吧,這對我來說很可悲,但我們有一家爲我們開發了一個不錯的動態django網站的公司。而現在我不知道爲什麼它不像我那樣工作,儘管它會。

+1

嘗試在代碼更改後重新啓動Apache Web服務器。 – Jingo

+2

你重新啓動Apache嗎?在「開始」之後,python將.pyc格式的文件保存在.py文件的預編譯狀態下。 – PukeCloud

+1

將子類「KML_generator」並以這種方式實現您的更改可能會更好。 –

回答

4

您需要重新啓動Apache服務器以便Django選擇更改。

當導入模塊時,Python只加載一次源文件。編譯後的字節碼將保存在內存中。在導入時,Python還會將字節碼緩存在原始源文件旁邊的.pyc文件中,您可以通過比較.py和相應的.pyc文件上的時間戳來驗證是否發生了新的導入。

正常重啓應該就足夠了;在您的服務器上以root身份運行apache2ctl graceful

未來,您可能希望獲得自己的開發設置;運行相同的代碼(從VCS,當然),但使用內置的Django開發服務器:

python manage.py runserver 

Django開發服務器做它最好的時候,你改變它重新加載代碼。這是一個開發功能(看文件的變化成本性能)。

最後但並非最不重要的是,儘量避免更改第三方庫。改爲使用子類或monkeypatching,也許上游作者會願意爲您實現新功能或接受修補程序。這樣你就不必自己維護這些更改。

相關問題