2016-02-27 28 views
3

我有一個Django應用程序有一個共同的目錄結構:Django:其中是settings.py尋找進口,爲什麼?

project 
---manage.py 
---app 
    ---__init__.py 
    ---settings.py 
    ---settings_secret.py 
    ---a bunch of other files for the app itself 

這settings_secret.py文件包含secrets.py我不想發送到GitHub的變量。出於某種原因,我似乎無法將其導入settings.py。前5行settings.py的:

# Django settings for project. 
DEBUG = True 
TEMPLATE_DEBUG = DEBUG 
import os 
from settings_secret import * 

從而未能與部分堆棧跟蹤:

File "/foo/bar/project/app/settings.py", line 5, in <module> from settings_secret import * 
ImportError: No module named 'settings_secret' 

要調試,我創建了一個測試文件中/項目/像這樣:

from settings_secret import * 
print(VARIABLE_FROM_SETTINGS_SECRET) 

它像一個魅力工作。很顯然,settings.py並沒有在settings_secret的正確位置。那麼它在哪裏看?

+0

你在'app'下有'__init __。py'文件嗎?你還應該在'settings.py'中執行'from .settings_secret import *'。 – bbayles

+0

我有一個'__init __。py',只是忘了包含問題。編輯英寸。是的,我試過'.settings_secret導入*'和它的工作 - 但爲什麼?它爲什麼會起作用,爲什麼它沒有使用點,就像它在我的測試文件中一樣? – fildred13

+1

我想你應該通過環境變量設置你的導入,而不是「祕密文件」。 http://12factor.net/config – geekazoid

回答

2

settings.py,你應該做的:from .settings_secret import *

它的工作原理與.,因爲正確的語法應該是:

from app.settings_secret import *

卸下app是速記編碼,但同樣的原理適用。您需要告訴Django查找目錄(app),然後指定該目錄中的哪個文件來查找。

如果你只是做了,from settings_secret import *,你告訴Django的查找目錄settings_secret,它不存在。

這對你有意義嗎?

+0

是的,這是有道理的。如問,這顯然是正確的答案,所以我接受。儘管geekazoid在上面的評論中提到了一個很好的觀點,但其他人應該考慮在可能的情況下使用環境變量而不是本地設置文件。 – fildred13