问题在于:
在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
站在Apache上PS2。好吧,这对我来说很可怜,但我们有一家公司为我们开发了一个很好的动态django网站。而现在我不知道为什么它不会像我一样工作。
答案 0 :(得分:4)
您需要重新启动Apache服务器以便Django接收更改。
Python导入模块时只加载源文件一次。然后将编译后的字节码保存在内存中。在导入时,Python还会将字节码缓存在原始源文件旁边的.pyc
文件中,您可以通过比较.py
上的时间戳和相应的{{1}来验证是否发生了新的导入。文件。
优雅的重启应该足够了;在您的服务器上以root身份运行.pyc
。
将来,您可能希望自己进行开发设置;运行相同的代码(当然是从VCS),但使用内置的Django开发服务器:
apache2ctl graceful
Django开发服务器在您更改代码时会尽力重新加载代码。这只是开发功能(观看更改费用性能的文件)。
最后但同样重要的是,尽量避免更改第三方库。改为使用子类化或monkeypatching,也许上游作者愿意为您实现新功能或接受补丁。这样您就不必在不同版本中自行维护这些更改。