2017-10-04 116 views
0

我已經經歷了許多教程,構建了幾個應用程序,甚至還有一位Django的創建者閱讀了這本書。但是我被「適當的」目錄結構迷住了。Django的默認/邏輯目錄結構

一個似乎總是得到一棵樹,看起來像這樣(在虛擬環境下在頂部):

​​

我感到困惑的是,

os.path.abspath(__file__) 

點「mysitedir」 (參考文獻說它總是指向其中settings.py的目錄)。

想必這個想法是,整個'網站'下面有一個或多個'應用程序',儘管我從來沒有見過這樣做。

首先,這是否正確?第二,是否有一些令人信服的理由(或者我做錯了什麼)使'應用程序'不能插入'mysitedir'下面?這似乎更有意義並保持模塊化。

Django像遍歷整個樹尋找靜態文件的方式似乎很奇怪。在settings.py中列出'apps'也是不合邏輯的,並且 - 再一次說明 - Django需要遍歷並返回來查找這些文件(而不是隻能查看由os.path指定的目錄.abspath(文件)。

+0

在哪裏放置venv在某些方面取決於你的devops和你打算建立的地方。如果你通過elasticbeanstalk在AWS中構建,我通常會把它放在本地父項中,所以我不需要.gitignore它。如果你使用docker進行部署,你可能會採用不同的地方。不要過分使用應用程序和模型。這在歷史上使遷移更加簡單。 https://medium.com/cs-math/11-things-i-wish-i-knew-about-django-development-before-i-started-my-company-f29f6080c131 – sahutchi

+0

從1.3開始使用Django,他們保留改變目錄結構(或他們做了)。希望他們已經決定這一個不會改變。 –

回答

0

注意,默認的項目佈局只是一個建議,沒有什麼能阻止你把你的應用程序在mysitedir如果你想。

的Django希望它很容易使重當您運行manage.py runserver時,包含manage.py的目錄位於Python路徑中,因此您可以使用myapp1,myapp2等導入該目錄中的應用程序。

如果移動應用程序轉移至內mysitedir(包含設置了一個),那麼你會用mysitedir.myapp1mysitedir.myapp2等您的代碼現在有項目名稱硬編碼的,所以它是可重複使用的較少導入應用程序。

最後,Django並沒有真正地「遍歷」項目的目錄。當您執行import myapp時,Python會從Python路徑導入模塊。這可能是包含manage.py的外部項目目錄,或者如果它是已安裝的軟件包,則它可能會完全不同。

+0

明白了 - 很好的解釋。 Django很聰明,但有時候很神祕。 – eSurfsnake