2012年10月21日星期日

Django项目的路径设置

一个别人的Django项目,在命令行用manage.py启动是正常的,但在Eclipse里启动后却出错,页面显示找不到django-session表。发现是找不到SQLite数据库文件的原因。可以看出,django-session是Django进程访问的第一个表,以后如果碰到这个错误,那么一定是数据库配置的问题。

新建PyDev Django项目时,会有对话框来设置项目,包括数据库类型和库名。对于目录里已有相关文件的项目,这个设置是无效果的,该设置是为了给新建项目生成settings.py。出错开始,我还以为需要改正在这个对话框提供过的设置,就在项目属性里找相关的设置,但找不到。其实所有Django相关的设置都在settings.py里面。

settings.py里面,SQLite数据库文件是直接写的文件名,这就是个相对路径,相对于Django进程的工作目录,即getcwd(3)的结果。如果不是从项目根目录启动manage.py(假设settings.pymanage.py都在根目录),那就找不到数据库文件,因为在PyDev里面启动Django时,进程工作目录是Eclipse的Workspace所在目录。
所以不要提供相对路径,而应该使用“动态的绝对路径”。在settings.py的开头写入:
import os.path
ROOT = os.path.dirname(os.path.abspath(__file__))
这样ROOT就是settings.py文件所在目录,根据ROOT来指定项目文件的目录,包括SQLite数据库文件、静态文件等,不论从哪里启动项目,文件都可以找到。

没有评论:

发表评论