2008-09-04 66 views
40

佈置大django項目的最佳方式是什麼?這些教程提供了設置應用程序,模型和視圖的簡單說明,但關於如何細分應用程序和項目的信息較少,典型項目中應用程序之間允許/必須共享多少共享(顯然,這主要取決於該項目)以及如何/在哪裏通用模板應該保存。大django項目的項目設計/ FS佈局

有沒有人有例子,建議和解釋至於爲什麼某個項目佈局比另一個好?我特別感興趣的是加入大量的單元測試(2-5倍實際代碼庫的大小)和字符串外部化/模板。

回答

17

主要指導原則與任何其他大型代碼項目相似。應用應該解決一個明確定義的責任。 「申請」這個名字是一個用詞不當;應該將Django應用程序看作更可重用的組件,可以將它們組合在一起以創建實際的應用程序。每個應用程序的測試都應包含在該應用程序中。儘可能將應用程序彼此分離,但顯然會存在依賴關係,因此目標應該是儘可能簡化和保持依賴關係圖。

我更喜歡將項目的所有模板都保存在單個項目範圍的模板目錄下,併爲每個應用程序指定一個子目錄(每個應用程序使用模板子目錄是Django中非常強大的約定,因爲它避免了模板名稱應用程序之間的衝突)。單個項目範圍模板目錄的原因是模板,模板繼承樹和塊名稱可能是特定於項目的,因此很難提供可插入任何項目的「默認」應用程序模板。已經有一些嘗試解決基本站點範圍的模板和它們定義的塊的標準命名約定,但是我還沒有看到標準出現(他們在Pinax處做的事情可能是最接近我們的標準)。

再「串外化」,如果你的意思是國際化和本地化,Django的具有該標準的地方,它把.po文件大力支持 - 檢查docs

6

此頁面確實解決了我的一些問題的一個好工作:http://www.b-list.org/weblog/2006/sep/10/django-tips-laying-out-application/

具體做法是:

  1. 定義自定義模板標籤或過濾器,你必須創建在應用程序的一個子目錄目錄名爲templatetags,並且它必須包含一個名爲__init__.py的文件,以便它可以作爲Python模塊導入。
  2. 要定義將被Django的測試框架自動發現的單元測試,請將它們放入名爲tests的模塊(可以是名爲tests.py的文件或名爲tests的目錄)。測試框架也會在該模塊中找到任何文檔,但是這些文檔的首選位置當然是它們設計要測試的類或函數的文檔。
  3. 要提供將在應用程序安裝後立即執行的自定義SQL,請在應用程序目錄中創建一個名爲sql的子目錄;文件名應該與他們將要操作的表的模型的名稱相同;例如,如果您有一個名爲weblog的應用程序,其中包含名爲Entry的模型,則應用程序目錄中的文件sql/entry.sql可用於在創建條目表後立即修改或向其中插入數據。

約tests.py和測試(目錄)的說明也適用於模型,這有助於解決方式有許多測試(或模式)的一個文件的問題。

我仍然希望看到應用程序/項目細分的一些示例/建議,以及運行良好的大型django網站。

+0

在這個答案中,您需要在\ _ \ _ init__.py中轉義初始下劃線以避免它被標記引擎解釋爲粗體文本。 – akaihola 2009-01-16 12:18:17

3

Pinax project圍繞着可重複使用的小應用程序的想法而建立,這些應用程序很容易集成到一個項目中。他們使用項目Cloud 27作爲演示項目。

我正在研究的Django項目(稱爲Basie。它在0.1之前,所以沒有鏈接。)正試圖跟隨Pinax模型,到目前爲止它的工作相當好。

1

我目前的佈局源於我想要有我的網站的測試版本。這意味着每個站點都有兩個項目,因爲它們需要不同的配置,並迫使我將所有應用程序移出項目。

我創建了兩個文件夾:$ APP_ROOT/devel和$ APP_ROOT/prod。這些包含所有的應用程序。使用源代碼控制(在我的情況下git)我有在HEAD版本devel的應用程序,而prod中的應用程序被鎖定到PROD標記。這些模板也具有與應用程序相同佈局的自己的文件夾。

現在我可以在devel-apps文件夾和匹配的模板文件夾中完成所有的開發工作。當我有我感到滿意的東西時,我會標記該修訂版本並更新產品。

1

我真的很喜歡Randall Degges'後在這個問題上。他留下了關於如何將設置文件粘貼在一起的信息,但是我會發布一篇文章,以便我能夠鏈接,但是現在任何人都可以查看my repo,其中包含自述文件中的某個方向。