2010-10-04 71 views
6

我試圖從一開始就設置好開發我的django項目的最佳設置,並且我無法使所有內容在目錄結構中很好地播放。我已經設置了virtualenv(在這個例子中是env),這樣我就可以爲每個django項目部署一個乾淨的空python環境。django項目目錄結構和python路徑

的基本結構如下:

/env/ 
    /bin 
    /db   <--- Django DB 
    /downloads 
    /lib 
    /static  <--- Where css/imgs/js etc is served from 
    /project/ <--- Django root 
      /__init__.py 
      /settings.py 
      /manage.py 
      /appsfolder/ 
       /appname/ 
         /__init__.py 
         /models/ 
           /__init__.py 
           /somemodel.py 
         /urls/ 
          /__init__.py 
          /someurl.py 
         /views/ 
          /__init__.py 
          /someview.py 

這是基本的佈局;我希望每個項目都有一個應用程序目錄,並且每個應用程序都有一個單獨的文件夾供模型,視圖和url使用。

我遇到的問題是與python路徑以及如何處理模塊。

中的應用程序,我不希望有參考項目時,導入模塊,即我應該使用:

import appname.models.modelname 

不是:

import projectname.models.modelname 

幫助reusablility

在模型目錄中,我有以下內容init .py

from model1 import ModelName1 
from model2 import ModelName2 
from model3 import ModelName3 

__all__ = ['ModelName1', 'ModelName2', 'ModelName3'] 

但是當我嘗試使用一個單獨的URL文件(/appname/urls/urlfile.py)和進口車型,如下列:

from appname.models.somemodel import ModelName 

我得到一個「模塊找不到」錯誤。

同時:

from appsfolder.appname.models.somemodel import ModelName 

工程確定

我相信這是因爲應用程序不能直接Python路徑上,取而代之的則是在一個名爲appsfolder子文件夾,但我不知道如何去解決這個問題,同時保持一切可重用和相對的。

我知道一個解決方案是直接把下站點包python的路徑上的所有應用程序,但我真的不喜歡這個想法,因爲我認爲,應用程序應該在項目中,如果您使用的virtualenv的

回答

14

你可以把下面的你settings.py添加您appsfolderPYTHONPATH

import os 
import sys 

PROJECT_ROOT = os.path.dirname(__file__) 
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'appsfolder')) 
+0

這派上了用場用於在項目的根我自己'appviews'文件夾的分裂。他們有一個'模板',爲什麼不是視圖,以及? – Droogans 2012-03-15 21:48:07