我一直在尝试用 Django 制作一个简单的应用程序,并且注意到了以下行为:
每次我在项目文件夹中对 urls.py 进行更改时,更改都不会反映出来,直到我重新启动 http 守护程序。为什么?有什么办法可以不用这个吗?
我尝试将 r'^staff/$' 重定向到 staff.views.index(staff 是我的应用程序名称)。但访问 /staff 时出现“服务器错误”,检查 error_log 时显示“TemplateSyntaxError:渲染时捕获 ImportError:没有名为 staff 的模块”。这是什么意思?
在从 urls.py 中删除该特定行(并重新启动 httpd),访问 / 恢复到“它工作正常”页面。但是,当我清除所有浏览数据(包括缓存)后刷新页面时,我神奇地恢复了页面,显示
Using the URLconf defined in myproj.urls, Django tried these URL patterns, in this order:
^staff/$
The current URL, , didn't match any of these.
这真的让我很困惑;它怎么可能又回来了?我试图了解发生了什么,但遗憾的是,我失败了。照这样下去,我可能只能回到 cakephp 了。我不想回去,救命啊!
背景信息:
我在 Arch Linux 上使用 mod_wsgi 运行 Apache。myproj 是我的项目名称(位于 /srv/http-django),它有一个名为 staff 的应用程序(已添加到 INSTALLED_APPS)。我的 WSGI 脚本将 /srv/http-django 添加到 sys.path 并将 DJANGO_SETTINGS_MODULE 设置为 myproj.settings。
myproj/staff/views.py 包含 index 函数,它仅返回“Hello, World!”作为 HttpResponse
答案1
对于您的第一个问题,请阅读:
http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode
对于第二个问题,您可能遇到 sys.path 问题,或者更可能是导入顺序依赖性或模块命名问题。如果您幸运的话,可以使用以下描述的备用 WSGI 脚本文件:
http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html
可能会有帮助,但也可能没帮助。
答案2
如果您在守护进程模式下运行 mod_wsgi,则可以通过触摸 .wsgi 文件来更新更改。(不过我发现这有点不稳定)