django:更改URL模式仅在重启Eclipse时生效
如果我在我的Django网页应用的Python源代码中做了任何更改,保存后这些更改会立即生效。我可以在本地的浏览器中马上测试这些更改。
但是,当我在urls.py中更改网址模式时,似乎必须重启Eclipse才能让这些更改生效?这是怎么回事呢?
更新
我在Windows 7 64位上使用Eclipse Helios,Python版本是2.7.1。
更新2
抱歉,我得更正一下:实际上,源代码的任何更改都不会生效,不仅仅是网址模式的更改。只有对模板文件的更改会立即生效。
因此,我创建了一个新话题:Django:如何重启网页服务器以使源代码的更改生效
抱歉!
2 个回答
重启服务器可以让你看到更改的效果,但听起来可能是服务器没有正确重启,或者可能是浏览器缓存的问题。(试着清除缓存,看看是否有帮助)。如果你是在Eclipse中以运行配置的方式启动django服务器,那么你应该能看到进来的请求。
你的urls.py文件里的更改是什么样的?你有没有一些中间件在处理进来的网址请求?
也许你的请求中有些东西没有被识别到。在测试的时候,我有时会在请求被urls.py处理之前,把请求内容打印出来,看看里面有什么。你可以创建一个中间件模块,比如:
myproject.middleware.logrequest - (模块位置/文件名):
from django.conf import settings
from django.core.urlresolvers import reverse
from logging import getLogger
log = getLogger('my.log')
class LogRequestMiddleware(object):
def process_request(self, request):
parameters = []
for key, value in request.REQUEST.items():
parameters.append('{0}:{1}'.format(key,value))
log.debug('REQUEST: {0}'.format(', '.join(parameters)))
然后,在设置中把它添加到MIDDLEWARE_CLASSES的顶部附近(我把它放在'django.middleware.common.CommonMiddleware'下面) - 在这种情况下,名字应该是:'myproject.middleware.logrequest.LogRequestMiddleware'
我在这里使用的是日志记录,但打印输出也可以正常工作。
我不使用Eclipse,所以不太确定它是否应该自动更新。不过在我的服务器上,如果我更改了设置或网址,我必须先停止服务器再启动。如果我更改其他的.py文件,只需要重启一下,模板会立即更新。我一直以来都接受这样的方式,代码才能重新编译和更新。
你可以试着写一些脚本,这样就可以简单地通过调用 ./stop ./start ./restart
来操作了。
顺便说一下,我使用的是纯终端环境,使用Nginx和Gunicorn来提供服务。
更新:等一下,你是说你必须完全重启Eclipse吗?还是只是服务器部分?如果是前者,我觉得这有点偏离主题了。