Python-Django-靜態檔案
除了由伺服器生成的HTML檔案外,網頁應用一般需要提供其它必要的檔案 —— 比如圖片檔案、JavaScript指令碼和CSS樣式表 —— 來為使用者呈現出一個完整的網站。 在Django中,我們將這些檔案稱為“靜態檔案”。
對於小型專案,這不是個大問題,因為你可以將它們放在你的網頁伺服器可以訪問到的地方。 然而,在大一點的專案中 —— 尤其是那些由多個應用組成的專案 —— 處理每個應用提供的多個靜態檔案集合開始變得很難。
這正是django.contrib.staticfiles的用途:它收集每個應用(和任何你指定的地方)的靜態檔案到一個單獨的位置,這個位置在線上可以很容易維護。
自定義你的應用的外觀
首先在你的polls中建立一個static目錄。Django將在那裡查詢靜態檔案,這與Django在polls/templates/中尋找對應的模板檔案的方式是一致的。~~~
Django 的 STATICFILES_FINDERS 設定包含一個查詢器列表,它們知道如何從各種源找到靜態檔案。 其中預設的一個是AppDirectoriesFinder,像在剛剛polls中建立的那個專案查詢方式一樣,它會在每個INSTALLED_APPS下查詢“static”子目錄,。管理站點也為它的靜態檔案使用相同的目錄結構。
在你剛剛建立的static目錄中,建立另外一個目錄polls並在它下面建立一個檔案style.css
靜態檔案的名稱空間
與模板類似,我們可以將靜態檔案直接放在polls/static(而不是建立另外一個polls 子目錄),但實際上這是一個壞主意。Django將使用它所找到的第一個符合要求的靜態檔案的檔名,如果在你的不同應用中存在兩個同名的靜態檔案,Django將無法區分它們。我們需要告訴Django該使用其中的哪一個,最簡單的方法就是為它們新增名稱空間。
將下面的程式碼放入樣式表中 (polls/static/polls/style.css):
polls/static/polls/style.cssli a {
color: green;
}
下一步,在polls/templates/polls/index.html的頂端新增如下內容 :
polls/templates/polls/index.html{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />
{% load staticfiles %} 從staticfiles模板庫載入{% static %} 模板標籤。{% static %}模板標籤會生成靜態檔案的絕對URL。
這就是你在開發過程中所需要對靜態檔案做的所有處理。 重新載入http://localhost:8000/polls/,你應該會看到Question的超連結變成了綠色(Django的風格!),這意味著你的樣式表被成功匯入。
新增一張背景圖片¶
下一步,我們將建立一個子目錄來存放圖片。 在polls/static/polls/目錄中建立一個 images 子目錄。在這個目錄中,放入一張圖片background.gif。換句話,將你的圖片放在 polls/static/polls/images/background.gif。
然後,向你的樣式表新增(polls/static/polls/style.css):
polls/static/polls/style.cssbody {
background: white url("images/background.gif") no-repeat right bottom;
}
重新載入http://localhost:8000/polls/,你應該在螢幕的右下方看到載入的背景圖片。
警告:
當然,{% static %} 模板標籤在不是由 Django 生成的靜態檔案(比如樣式表)中是不可用的。你應該永遠使用相對路徑來相互連結靜態檔案,因為這樣你可以改變STATIC_URL ( static模板標籤用它來生成URLs)而不用同時修改一大堆靜態檔案的路徑。