這篇教程從第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)了剪芍。