這一篇從?教程第 5 部分?結(jié)尾的地方繼續(xù)講起枝冀。在上一節(jié)中我們?yōu)榫W(wǎng)絡(luò)投票應(yīng)用編寫了測試衅鹿,而現(xiàn)在我們要為它加上樣式和圖片颜启。
除了服務(wù)端生成的 HTML 以外,網(wǎng)絡(luò)應(yīng)用通常需要一些額外的文件——比如圖片走贪,腳本和樣式表——來幫助渲染網(wǎng)絡(luò)頁面佛猛。在 Django 中,我們把這些文件統(tǒng)稱為“靜態(tài)文件”坠狡。
對于小項(xiàng)目來說继找,這個(gè)問題沒什么大不了的,因?yàn)槟憧梢园堰@些靜態(tài)文件隨便放在哪逃沿,只要服務(wù)程序能夠找到它們就行婴渡。然而在大項(xiàng)目——特別是由好幾個(gè)應(yīng)用組成的大項(xiàng)目——中,處理不同應(yīng)用所需要的靜態(tài)文件的工作就顯得有點(diǎn)麻煩了凯亮。
這就是?django.contrib.staticfiles?存在的意義:它將各個(gè)應(yīng)用的靜態(tài)文件(和一些你指明的目錄里的文件)統(tǒng)一收集起來边臼,這樣一來,在生產(chǎn)環(huán)境中假消,這些文件就會(huì)集中在一個(gè)便于分發(fā)的地方柠并。
自定義?應(yīng)用?的界面和風(fēng)格?
首先,在你的?polls?目錄下創(chuàng)建一個(gè)名為?static?的目錄。Django 將在該目錄下查找靜態(tài)文件臼予,這種方式和 Diango 在?polls/templates/?目錄下查找 template 的方式類似鸣戴。
Django 的?STATICFILES_FINDERS?設(shè)置包含了一系列的查找器,它們知道去哪里找到 static 文件粘拾。AppDirectoriesFinder?是默認(rèn)查找器中的一個(gè)窄锅,它會(huì)在每個(gè)?INSTALLED_APPS?中指定的應(yīng)用的子文件中尋找名稱為?static?的特定文件夾,就像我們在?polls?中剛創(chuàng)建的那個(gè)一樣半哟。管理后臺采用相同的目錄結(jié)構(gòu)管理它的靜態(tài)文件酬滤。
在你剛創(chuàng)建的?static?文件夾中創(chuàng)建一個(gè)名為?polls?的文件夾,再在?polls?文件夾中創(chuàng)建一個(gè)名為?style.css?的文件寓涨。換句話說,你的樣式表路徑應(yīng)是?polls/static/polls/style.css氯檐。因?yàn)?AppDirectoriesFinder?的存在戒良,你可以在 Django 中簡單地使用以?polls/style.css?的形式引用此文件,類似你引用模板路徑的方式冠摄。
靜態(tài)文件命名空間
雖然我們?可以?像管理模板文件一樣糯崎,把 static 文件直接放入?polls/static?——而不是創(chuàng)建另一個(gè)名為?polls?的子文件夾,不過這實(shí)際上是一個(gè)很蠢的做法河泳。Django 只會(huì)使用第一個(gè)找到的靜態(tài)文件沃呢。如果你在?其它?應(yīng)用中有一個(gè)相同名字的靜態(tài)文件,Django 將無法區(qū)分它們拆挥。我們需要指引 Django 選擇正確的靜態(tài)文件薄霜,而最簡單的方式就是把它們放入各自的?命名空間?。也就是把這些靜態(tài)文件放入?另一個(gè)?與應(yīng)用名相同的目錄中纸兔。
將以下代碼放入樣式表(polls/static/polls/style.css):
polls/static/polls/style.css
lia{color:green;}
下一步惰瓜,在?polls/templates/polls/index.html?的文件頭添加以下內(nèi)容:
polls/templates/polls/index.html
{%loadstatic%}<linkrel="stylesheet"type="text/css"href="{%static'polls/style.css'%}"/>
{%?static?%}?模板標(biāo)簽會(huì)生成靜態(tài)文件的絕對路徑。
以上就是你全部需要做的事汉矿。瀏覽器重載?http://localhost:8000/polls/崎坊,然后你可以看到投票鏈接是綠色的(Django 樣式),這意味著你的樣式表被正確加載了洲拇。
添加一個(gè)背景圖?
接著奈揍,我們會(huì)創(chuàng)建一個(gè)用于存在圖像的目錄。在?polls/static/polls?目錄下創(chuàng)建一個(gè)名為?images?的子目錄赋续。在這個(gè)目錄中男翰,放一張名為?background.gif?的圖片。換言之蚕捉,在目錄?polls/static/polls/images/background.gif?中放一張圖片奏篙。
隨后,在你的樣式表(polls/static/polls/style.css)中添加:
polls/static/polls/style.css
body{background:whiteurl("images/background.gif")no-repeat;}
瀏覽器重載?http://localhost:8000/polls/,你將在屏幕的左上角見到這張背景圖秘通。
Warning
當(dāng)然为严,{%?static?%}?模板標(biāo)簽在靜態(tài)文件(例如樣式表)中是不可用的,因?yàn)樗鼈儾皇怯?Django 生成的肺稀。你仍需要使用?相對路徑?的方式在你的靜態(tài)文件之間互相引用第股。這樣之后,你就可以任意改變?STATIC_URL`(由?:ttag:`static模板標(biāo)簽用于生成 URL)话原,而無需修改大量的靜態(tài)文件夕吻。
這些只是?基礎(chǔ)?。更多關(guān)于設(shè)置和框架的資料繁仁,參考?靜態(tài)文件解惑?和?靜態(tài)文件指南涉馅。部署靜態(tài)文件?介紹了如何在真實(shí)服務(wù)器上使用靜態(tài)文件。
當(dāng)你熟悉靜態(tài)文件后黄虱,閱讀?此教程的第 7 部分?來學(xué)習(xí)如何自定義 Django 自動(dòng)生成后臺網(wǎng)頁的過程稚矿。