2012-09-03 55 views
0

在我的主目錄中,我有一個名爲local的文件夾。其中有文件__init__.pylocal_settings.py。我的django應用程序位於完全不同的目錄中。當應用程序是不是運行在DEBUG模式,我想它加載local_settings.py文件。這如何成爲現實?我讀了下面:django從服務器導入本地設置

Import a module from a relative path

Importing files from different folder in Python

http://docs.python.org/tutorial/modules.html

基本上,這些教程被允許從另一個目錄中導入,但對於一個完全不同的工作樹?我不想繼續做,..,..等。有沒有辦法轉到主目錄?

我嘗試下面的代碼:

import os, sys 
os.chdir(os.path.join(os.getenv("HOME"), 'local')) 
from local_settings import * 

,但我一直在看我的Apache error.log中爲它的錯誤...

+1

如果您將設置文件放在同一目錄中並在運行應用程序時指定它,那會更好。 –

+0

我可以......問題在於部署時,這些是本地設置,而不是我想要的源代碼控制。當我進行部署時,這些將被覆蓋或刪除。 – KVISH

回答

0

os.chdir只是影響當前工作目錄,這並沒有任何關係做Python從Python中導入模塊的地方。

你需要做的是將local目錄添加到Pythonpath中。您可以通過修改PYTHONPATH,或者從內部的Python通過修改sys.path做到這一點從shell:

import sys 
sys.path.append(os.path.expanduser("~/local")) 
import local_settings 
+0

工作!除了'import'缺少'os'外。 – KVISH

0

在回答您的有關源代碼控制的擔憂,您只需設置源控制忽略該文件,和/或者將symlink安裝爲部署腳本的一部分,以將os上的文件鏈接到另一個腳本中。我都這樣做,但不是在Django中。但這是一項微不足道的任務。

您的部署佈局看起來是這樣的:

/current (symlink to /releases/v3) 
/settings/local_settings.py 
/releases/v1 
/releases/v2 
/releases/v3 

和任務運行作爲部署的一部分:

cd /current 
ln -s /settings/local_settings.py local_settings.py 

,如果你與Fab或Capistrano的部署,這是一個幾行的配置。我相信你也可以用木偶/廚師做到這一點。

相關問題