2011-09-29 31 views

回答

7

在Django中可能有方法來提供靜態文件,但Django 1.3引入了一個新的選項來處理它們。基本上,您可以在包含靜態媒體的項目級別或應用程序級別定義特定目錄。然後通過管理命令'collectstatic',可以將項目目錄中的所有靜態文件複製到Web服務器提供的單獨目錄(可能在項目外部)。這解決了以前方法的許多複雜問題。

1)它允許第三方應用程序以標準方式輕鬆包含靜態文件。不再需要從您的web服務器目錄創建符號鏈接到各個python/django模塊中的位置。

2)它使您可以更好地控制Web服務器可以託管其靜態文件的位置。例如,您可以在版本控制下定義項目內的所有靜態媒體,但將其全部複製到文件系統任何位置的外部位置。這樣可以避免必須將Web服務器指向項目內的某個位置。

3)分離靜態媒體,永遠不會改變靜態媒體,由用戶使用像FileField一樣上傳的靜態媒體。這很好,因爲您可能希望將站點級靜態媒體保存在版本控制中(要安裝在您的開發服務器上),但用戶提交的內容將上傳到不同的目錄(與1.3版之前的django版本不同)。

我認爲這個功能曾經是合併到核心的第三方模塊。

下面是文檔: https://docs.djangoproject.com/en/dev/howto/static-files/

基本上有一些新的settings.py變量:

STATIC_ROOT - 這是你的文件系統,將您的網絡服務器提供服務的目錄。運行./manage.py collectstatic時,項目中的所有靜態文件及其應用程序都將被複制到您在此處指定的目錄中。

STATIC_URL - 這是您將設置用來表示您的內容將基於哪個網址的網址。如果你將這個值設置爲「/ static /」,那麼「/ static /」將作爲所有靜態介質URL的前綴。你也將在你的模板中使用這個變量。例如,在你的模板,你可以指定類似:其中靜態文件複製到

 
    <img src="{{ STATIC_URL }}logo.png"> 

的STATIC_ROOT設置變量指定的,但你也需要提供其中的靜態文件從複製的位置。這可以通過在單個Django應用程序中創建一個名爲「static //」的目錄來完成,類似於您在應用程序中對模板所做的操作。在運行collectstatic命令時,Django會將所有應用程序中所有「靜態/」目錄中的所有靜態文件複製到STATIC_ROOT目錄。您也可以使用STATICFILES_DIRS設置變量來定義項目級目錄以從中複製靜態媒體。

雖然靜態媒體有很多種服務方式,但我認爲這是Django設置的一個很好的API,它有助於更​​好地集成第三方模塊。這個特徵現在被包含在覈心中的事實可以表明這種方法可能獲得了一些動力。

希望這有助於 喬