Part6 靜態(tài)文件的管理

這篇教程從第5節(jié)開(kāi)始犀忱,我們已經(jīng)創(chuàng)建了一個(gè)測(cè)試過(guò)的web投票應(yīng)用,現(xiàn)在我們會(huì)添加一個(gè)表格和一張圖片娃圆。
除了由服務(wù)器生成的HTML陷遮,web應(yīng)用通常也需要提供額外的文件 —— 例如圖片蜂挪、JS或者CSS,這些都是用來(lái)渲染完整的Web頁(yè)面嗓化。在Django里棠涮,我們把這些文件統(tǒng)一稱為“靜態(tài)文件”。

對(duì)于小的項(xiàng)目刺覆,這個(gè)不是大問(wèn)題严肪,因?yàn)槟阒恍枰鸯o態(tài)文件放在你的web服務(wù)器可以找到的地方久可以了。然而谦屑,在大的項(xiàng)目里驳糯,特別是由多個(gè)app組成的項(xiàng)目。處理每個(gè)app提供的多個(gè)靜態(tài)文件集合就開(kāi)始變得棘手了氢橙。

這就是django.contrib.staticfiles處理的事情:它從你的每個(gè)應(yīng)用(或者你指定的其他位置)里收集靜態(tài)文件到一個(gè)單獨(dú)的位置酝枢,這個(gè)位置在生產(chǎn)環(huán)境可以簡(jiǎn)單地供客戶端訪問(wèn)。

定制你的APP的外觀和感覺(jué)

首先悍手,在你的polls目錄里創(chuàng)建一個(gè)名為static的目錄帘睦,Django會(huì)在這里查找靜態(tài)文件,這個(gè)和Django在polls/templates/里查找模板文件很相似坦康。

Django的STATICFILES_FINDERS設(shè)置包含了一個(gè)查找目錄列表官脓,知道怎么去多個(gè)資源位置查找靜態(tài)文件。默認(rèn)設(shè)置是AppDirectoriesFinder涝焙,用來(lái)在每個(gè)INSTALLED_APPS目錄下面尋找static子目錄卑笨。就像我們剛才在polls下面創(chuàng)建的那個(gè)。admin站點(diǎn)也是用這種方式管理他的靜態(tài)文件仑撞。

在你剛創(chuàng)建的static目錄里面赤兴,創(chuàng)建一個(gè)polls目錄,然后在polls目錄里面創(chuàng)建一個(gè)叫做style.css的文件隧哮。換句話說(shuō)桶良,你的樣式文件路徑應(yīng)該是polls/static/polls/style.css。因?yàn)?code>AppDirectoriesFinder靜態(tài)文件查找器的工作方式沮翔,以后你可以在Django里簡(jiǎn)單地通過(guò)polls/style.css這樣來(lái)引用靜態(tài)文件陨帆。和你引用模板的路徑相似。

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

和模板一樣采蚀,我們可以直接將靜態(tài)文件放在polls/static里(而不是創(chuàng)建一個(gè)polls子目錄)疲牵,但這樣做不是很好。因?yàn)镈jango會(huì)選擇第一個(gè)名稱匹配的靜態(tài)文件榆鼠,如果你在不同的應(yīng)用里有相同名稱的靜態(tài)文件的話纲爸,Django是沒(méi)用能力分辨這些同名文件之間的區(qū)別的,只會(huì)使用第一個(gè)找到的文件妆够。所以最簡(jiǎn)單的方式就是把他們放到命名空間里识啦。就是把這些靜態(tài)文件放到一個(gè)應(yīng)用名稱的子目錄下面负蚊。

把下面的代碼放到樣式表里面(polls/static/polls/style.css):

li a {
    color: green;
}

下一步,把下面的代碼添加到polls/template/polls/index.html文件的頂端:

{% load static %}

<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />

{% static %}模板標(biāo)簽生成靜態(tài)文件的絕對(duì)url路徑颓哮。這就是你在開(kāi)發(fā)中要做的所有事情家妆,重新加載http://localhost:8000/polls/地址,你會(huì)看到question的鏈接是綠色的(Django 風(fēng)格)冕茅,意味著你的樣式表正常加載了伤极。

添加一個(gè)背景圖象

下一步,我們要為圖象創(chuàng)建一個(gè)子目錄嵌赠,在polls/static/polls/目錄下面創(chuàng)建一個(gè)images子目錄塑荒,在這個(gè)目錄里面,放一個(gè)叫做background.gif的圖片文件姜挺。換句話說(shuō)齿税,你的圖片文件位置是:polls/static/polls/images/background.gif.
然后,把下面的代碼添加到你的樣式表(polls/static/poll/style.css)里炊豪。

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

重新加載http://localhost:8000/polls/你會(huì)發(fā)現(xiàn)背景圖在屏幕的右上方凌箕。

警告

像你的樣式表那樣使用{% static %}模板標(biāo)簽當(dāng)然不可用,特別是文件不是由Django生成的時(shí)候词渤。你應(yīng)該經(jīng)常使用相對(duì)路徑來(lái)鏈接你的靜態(tài)文件牵舱。因?yàn)檫@樣后面你才能修改STATIC_URL(被STATIC模板標(biāo)簽用來(lái)生成它自己的URL路徑)而不需要修改你的靜態(tài)文件里的一堆路徑。

上面這些都是基礎(chǔ)內(nèi)容缺虐,對(duì)于更多的設(shè)置細(xì)節(jié)以及其他包含框架的的內(nèi)容芜壁,可以看官方文檔怎么組織靜態(tài)文件靜態(tài)文件引用分發(fā)靜態(tài)文件這篇文檔則是討論怎么在一個(gè)真實(shí)的服務(wù)器上使用靜態(tài)文件高氮。

當(dāng)你熟悉了怎么使用靜態(tài)文件以后慧妄,就可以學(xué)習(xí)第7節(jié)的內(nèi)容,關(guān)于怎么定制Django的自動(dòng)生成式管理站點(diǎn)了剪芍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末塞淹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子罪裹,更是在濱河造成了極大的恐慌饱普,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状共,死亡現(xiàn)場(chǎng)離奇詭異套耕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)口芍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)箍铲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鬓椭,你說(shuō)我怎么就攤上這事颠猴。” “怎么了小染?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵翘瓮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我裤翩,道長(zhǎng)资盅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任踊赠,我火速辦了婚禮呵扛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筐带。我一直安慰自己今穿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布伦籍。 她就那樣靜靜地躺著蓝晒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帖鸦。 梳的紋絲不亂的頭發(fā)上芝薇,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音作儿,去河邊找鬼洛二。 笑死,一個(gè)胖子當(dāng)著我的面吹牛攻锰,可吹牛的內(nèi)容都是我干的晾嘶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼口注,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼变擒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起寝志,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娇斑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后材部,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體毫缆,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年乐导,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苦丁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡物臂,死狀恐怖旺拉,靈堂內(nèi)的尸體忽然破棺而出产上,到底是詐尸還是另有隱情,我是刑警寧澤蛾狗,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布晋涣,位于F島的核電站,受9級(jí)特大地震影響沉桌,放射性物質(zhì)發(fā)生泄漏谢鹊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一留凭、第九天 我趴在偏房一處隱蔽的房頂上張望佃扼。 院中可真熱鬧,春花似錦蔼夜、人聲如沸兼耀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)翠订。三九已至,卻和暖如春遵倦,著一層夾襖步出監(jiān)牢的瞬間尽超,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工梧躺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留似谁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓掠哥,卻偏偏與公主長(zhǎng)得像巩踏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子续搀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容