2012-02-02 84 views
6

我正在計劃一個新的Django項目,並希望獲得一切正確和東西。我偶然發現如何組織項目目錄佈局的問題。幸運的是,網上有很多好的項目模板的例子。儘管如此,還有一件事我很難理解:Django中的模板和靜態文件的位置

這是將模板文件放入項目根目錄下的推薦方式,該項目根目錄由應用程序劃分爲子目錄。所以,模板不在應用程序目錄中。這對我來說似乎合乎邏輯,因爲我們要將應用程序邏輯與表示邏輯分開。但是靜態文件呢?在這裏,通常的做法似乎是將靜態文件放在應用程序目錄中,並在開發時將它們加載到項目根目錄下的靜態目錄(collectstatic)中。而這個邏輯我不明白。由於靜態文件(即js,css,圖像)通常在模板中訪問,而不是在應用程序代碼中訪問,所以我會將它們計算爲表示邏輯。那爲什麼他們不像模板那樣存儲 - 項目根目錄下的一個目錄,以及單個應用程序的子目錄?

我知道我可以將這些文件存儲在任何我想要的地方,但我想這可能是人們爲什麼這樣做的一個很好的理由。這是什麼原因?

回答

8

靜態文件可以放在相關應用程序中,其方式與通常將與特定應用程序相關的模板放在應用程序目錄中的方式相同。

有時候,這是有道理的。有時候,它不是 - 這是你的電話。例如,我將我的靜態媒體放在site_media目錄(全局css,全局圖像等)中,但將應用特定媒體放在app/static中。例如,如果我有一個Poll應用程序,很可能我的媒體僅用於投票應用程序模板,而不是我的網站索引。

這同樣適用於模板:我將全局模板(base.html)放在全局模板目錄中,但應用程序特定的模板放在myapp/templates/myapp/foo.html中。

最後,它對可插拔應用程序特別有意義。例如,django的靜態文件存儲在應用程序中,但即使應用程序駐留在python路徑的某處,您的靜態文件目錄也可以訪問該文件。以前,您將不得不將媒體目錄或符號鏈接複製到它。

靜態文件應用程序真的很閃亮,因爲它可以讓你在一個地方組織應用程序文件夾:所有與應用程序相關的文件collectstatic負責其餘部分,並在一個位置爲Web服務器提供全部功能。

+0

我發現在應用程序目錄中組織模板和靜態文件對於可插入應用程序來說很合理。但是,如果我不打算創建可插拔應用程序,沒有任何好處,不是嗎?每次部署我的項目的新版本時,我只需要調用'collectstatic'的開銷。 – j0ker 2012-02-03 17:15:47

+0

@ J0ker,這是可辯論的,完全是你的呼叫。有時,如果它是一個獨立打包的應用程序,我發現自己使用'app/static'。其他時候,對於一組與所有核心網站相關的應用程序,我只需使用我的'site_media'文件夾。調用「collectstatic」的開銷因爲我使用無論如何使用它的結構腳本而被移除。 PLUS <如果您配置了staticfiles存儲後端,您可以將collectstatic上傳到amazon S3非常有用。 – 2012-02-03 17:46:43

5

我實際上把模板放在每個應用程序的目錄中,我認爲它是有道理的。由於其他所有內容都發生在Python文件中,因此您仍然有邏輯分離的分離。

但是,將模板目錄放在應用程序中意味着如果結果顯示該應用程序對其他項目很有用,則可以將應用程序直接複製到新項目。而且您始終可以通過在根模板文件夾中創建替代模板來覆蓋這些模板。

這就是爲此,靜態目錄應該被存儲在應用程序目錄;它允許您根據特定應用程序的需要非常清楚地組織資源,這就是staticfiles應用程序首先創建的原因。