鍍金池/ 教程/ Python/ 編寫你的第一個Django應用,第6部分
點擊劫持保護
安全問題歸檔
Model 類參考
將遺留數(shù)據(jù)庫整合到Django
關聯(lián)對象參考
內建基于類的視圖的API
聚合
Django 中的用戶認證
django.contrib.humanize
Django管理文檔生成器
分頁
使用Django輸出CSV
加密簽名
文件儲存API
安全
Django中的測試
國際化和本地化
為Django編寫首個補丁
條件表達式
日志
模型元選項
部署靜態(tài)文件
執(zhí)行查詢
使用Django認證系統(tǒng)
基于類的視圖
中間件
編寫自定義的django-admin命令
Django 的設置
格式本地化
數(shù)據(jù)庫訪問優(yōu)化
錯誤報告
基于類的內建通用視圖
編寫自定義存儲系統(tǒng)
編寫你的第一個 Django 程序 第3部分
編寫數(shù)據(jù)庫遷移
使用表單
編寫你的第一個 Django 程序 第2部分
編寫你的第一個 Django 程序 第1部分
如何使用會話
系統(tǒng)檢查框架
新手入門
信號
編寫視圖
如何使用WSGI 部署
編寫你的第一個Django應用,第6部分
常見的網(wǎng)站應用工具
Widgets
內建的視圖
模型實例參考
視圖層
Django中的密碼管理
高級教程:如何編寫可重用的應用
國際化和本地化
"本地特色"附加功能
TemplateResponse 和 SimpleTemplateResponse
模式編輯器
文件上傳
快速安裝指南
部署 Django
表單 API
表單素材 ( <code>Media</code> 類)
管理文件
其它核心功能
查找 API 參考
表單
Admin
數(shù)據(jù)庫函數(shù)
自定義查找
使用基于類的視圖處理表單
管理操作
開發(fā)過程
編寫你的第一個Django應用,第5部分
進行原始的sql查詢
模型層
多數(shù)據(jù)庫
編寫你的第一個 Django 程序 第4部分
Django安全
Django 初探
Django異常
重定向應用
按需內容處理
管理器
視圖裝飾器
驗證器
使用Django輸出PDF
File對象
Django 的快捷函數(shù)
基于類的通用視圖 —— 索引
為模型提供初始數(shù)據(jù)
模板層
URL調度器
中間件
模型

編寫你的第一個Django應用,第6部分

本教程上接教程 5。 我們已經(jīng)建立一個測試過的網(wǎng)頁投票應用,現(xiàn)在我們將添加一張樣式表和一張圖片。

除了由服務器生成的HTML文件外,網(wǎng)頁應用一般需要提供其它必要的文件 —— 比如圖片文件、JavaScript腳本和CSS樣式表 —— 來為用戶呈現(xiàn)出一個完整的網(wǎng)站。 在Django中,我們將這些文件稱為“靜態(tài)文件”。

對于小型項目,這不是個大問題,因為你可以將它們放在你的網(wǎng)頁服務器可以訪問到的地方。 然而,在大一點的項目中 —— 尤其是那些由多個應用組成的項目 —— 處理每個應用提供的多個靜態(tài)文件集合開始變得很難。

這正是django.contrib.staticfiles的用途:它收集每個應用(和任何你指定的地方)的靜態(tài)文件到一個單獨的位置,這個位置在線上可以很容易維護。

自定義你的應用的外觀

首先在你的polls中創(chuàng)建一個static目錄。Django將在那里查找靜態(tài)文件,與Django如何polls/templates/內部的模板類似。

Django 的 STATICFILES_FINDERS 設置包含一個查找器列表,它們知道如何從各種源找到靜態(tài)文件。 其中默認的一個是AppDirectoriesFinder,它在每個INSTALLED_APPS下查找“static”子目錄,就像剛剛在polls中創(chuàng)建的一樣。管理站點也為它的靜態(tài)文件使用相同的目錄結構。

在你剛剛創(chuàng)建的static目錄中,創(chuàng)建另外一個目錄polls并在它下面創(chuàng)建一個文件style.css。換句話講,你的樣式表應該位于polls/static/polls/style.css。因為AppDirectoriesFinder 靜態(tài)文件查找器的工作方式,你可以通過polls/style.css在Django中訪問這個靜態(tài)文件,與你如何訪問模板的路徑類似。

靜態(tài)文件的命名空間

與模板類似,我們可以家那個我們的靜態(tài)文件直接放在polls/static(而不是創(chuàng)建另外一個polls 子目錄),但實際上這是一個壞主意。Django將使用它所找到的第一個文件名符合要求的靜態(tài)文件,如果在你的不同應用中存在兩個同名的靜態(tài)文件,Django將無法區(qū)分它們。 我們需要告訴Django該使用其中的哪一個,最簡單的方法就是為它們添加命名空間。 也就是說,將這些靜態(tài)文件放進以它們所在的應用的名字命名的另外一個目錄下。

將下面的代碼放入樣式表中 (polls/static/polls/style.css):

polls/static/polls/style.css
li 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 %}模板標簽會生成靜態(tài)文件的絕對URL。

這就是你在開發(fā)過程中,所需要對靜態(tài)文件做的所有處理。 重新加載 http://localhost:8000/polls/ ,你應該會看到Question的超鏈接變成了綠色(Django的風格?。?,這意味著你的樣式表被成功導入。

添加一張背景圖片

下一步,我們將創(chuàng)建一個子目錄來存放圖片。 在polls/static/polls/目錄中創(chuàng)建一個 images 子目錄。在這個目錄中,放入一張圖片background.gif。換句話,將你的圖片放在 polls/static/polls/images/background.gif。

然后,向你的樣式表添加(polls/static/polls/style.css):

polls/static/polls/style.css
body {
    background: white url("images/background.gif") no-repeat right bottom;
}

重新加載 http://localhost:8000/polls/ ,你應該在屏幕的右下方看到載入的背景圖片。

警告:

當然,{% static %}模板標簽不能用在靜態(tài)文件(比如樣式表)中,因為他們不是由Django生成的。 你應該永遠使用相對路徑來相互鏈接靜態(tài)文件,因為這樣你可以改變STATIC_URL ( static模板標簽用它來生成URLs)而不用同時修改一大堆靜態(tài)文件的路徑。

這些知識基礎。關于靜態(tài)文件設置的更多細節(jié)和框架中包含的其它部分,參見靜態(tài)文件 howto 和靜態(tài)文件參考。部署靜態(tài)文件討論如何在真實的服務器上使用靜態(tài)文件。

下一步?

新手教程到此結束。 在這期間,你可能想要在如何查看文檔中了解文檔的結構和查找相關信息方法。

如果你熟悉Python 打包的技術,并且對如何將投票應用制作成一個“可重用的應用”感興趣,請看高級教程:如何編寫可重用的應用。

譯者:Django 文檔協(xié)作翻譯小組,原文:Part 6: Static files

本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉載請保留作者署名和文章出處。

Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。