創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
django運(yùn)用css的方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
這個(gè)問(wèn)題出在以Djiango做后臺(tái)的前端界面上。按以往的習(xí)慣,css,js,image等靜態(tài)文件直接在前端html中寫好鏈接,直接丟上去就可以,但當(dāng)把含外部css的html在丟到Django后發(fā)現(xiàn),css并沒(méi)有載入,自然,其他靜態(tài)文件也是如此。
原因分析
出現(xiàn)這個(gè)問(wèn)題其實(shí)是因?yàn)槌绦騿T太想當(dāng)然了。在以往的php做后端的例子中,我們只要知道url就可以訪問(wèn)網(wǎng)站根目錄下的任何文件。以外部css為例,在瀏覽器獲得html文件后會(huì)對(duì)資源進(jìn)行鏈接,鏈接css文件時(shí),將向服務(wù)器請(qǐng)求css的url對(duì)應(yīng)的css文件,該css文件確實(shí)存在,于是服務(wù)器將之返回,瀏覽器成功鏈接到外部css文件。整個(gè)過(guò)程十分簡(jiǎn)單。
那么為什么Django鏈接不到?原因出在一開(kāi)始,css對(duì)應(yīng)的url不存在。Django并不像php那樣可以訪問(wèn)網(wǎng)站根目錄下的文件,它只會(huì)對(duì)路由所包含的路徑進(jìn)行對(duì)應(yīng)的響應(yīng)。簡(jiǎn)單來(lái)說(shuō),你隨便往Django根目錄丟給文件,在不編寫路由的情況下,是不可能通過(guò)url獲得的。同樣,如果嘗試訪問(wèn)沒(méi)有寫進(jìn)路由的css文件,那么返回只可能是404。既然資源404了,那么瀏覽器請(qǐng)求不到,導(dǎo)入失敗就是理所當(dāng)然的。
解決方法
在settings.py中導(dǎo)入靜態(tài)資源
既然是url不存在,那么讓它存在就好。理論上只要把css對(duì)應(yīng)的url編寫進(jìn)路由使其返回css文件,那么就能請(qǐng)求到了。當(dāng)然我不會(huì)這么干,因?yàn)椋珼jango理所當(dāng)然地提供了解決方案。
在settings.py的INSTALLED_APPS中,我們可以找到django.contrib.staticfiles這項(xiàng),它的作用就是管理靜態(tài)文件。它的功能大致可以理解為將settings.py中的STATICFILES_DIRS列表中的路徑變?yōu)榭稍L問(wèn)。同時(shí)對(duì)于路徑,django的settings.py中存在一個(gè)保存根路徑的變量:
BASE_DIRos.path.dirname(os.path.dirname(os.path.abspath(__file__)))
對(duì)于官方的解決方案,靜態(tài)文件是保存在根目錄下的static文件夾中,所以使用一個(gè)變量指向static文件夾(當(dāng)然具體情況可以視實(shí)際路徑而更改):
STATIC_ROOT= os.path.join(BASE_DIR,'static')
然后,在settings.py中,存在這樣一個(gè)變量(如果沒(méi)有就自己加上吧):
STATIC_URL = '/static/'
這個(gè)變量的功能稍后再提。在這些準(zhǔn)備好之后,就可以將靜態(tài)文件路徑加到STATICFILES_DIRS列表中了。比如,如果css文件相對(duì)static文件夾的路徑為“css/test.css”,那么寫入后:
STATICFILES_DIRS=[os.path.join(STATIC_ROOT,'css'),]
那么現(xiàn)在試著訪問(wèn)路徑(以本地端口127.0.0.1:8000為例):127.0.0.1:8000/static/css/test.css,會(huì)發(fā)現(xiàn)成功獲取。同樣,在html文件link時(shí)寫 href="static/css/test.css",就可以成功獲得。
這里大概就能看出STATIC_URL的作用了。路徑中存在/static/這一部分,和STATIC_URL有沒(méi)有關(guān)系呢?
嘗試這樣修改:
STATIC_URL = '/stardust/'
再訪問(wèn)127.0.0.1:8000/static/css/test.css,返回404。但改為訪問(wèn)127.0.0.1/stardust/css/test.css,訪問(wèn)成功。確認(rèn)這個(gè)變量是靜態(tài)文件的url的目錄。
我們?cè)賴L試將圖片文件添加進(jìn)去。比如在static文件夾下有一個(gè)src文件夾保存圖片等文件,src/img文件夾保存圖片,其中有mio.jpg,于是如此修改:
STATICFILES_DIRS=[ os.path.join(STATIC_ROOT,'css'), os.path.join(STATIC_ROOT,'src/img'), ]
訪問(wèn)127.0.0.1:8000/static/src/img/mio.jpg,訪問(wèn)成功。其他靜態(tài)資源添加方式也是如此,只用添加文件夾,就能訪問(wèn)內(nèi)部文件。
值得多提的是,STATICFILES_DIRSSTATICFILES_DIRS支持添加二元元組,第一個(gè)值作為url中的路徑,第二個(gè)值作為實(shí)際路徑舉個(gè)例子,將它如此修改
STATICFILES_DIRS=[ ('css',os.path.join(STATIC_ROOT,'css')), ('img',os.path.join(STATIC_ROOT,'src/img')), ]
127.0.0.1:8000/static/css/test.css依然訪問(wèn)成功,但是127.0.0.1:8000/static/src/img/mio.jpg訪問(wèn)失敗。而訪問(wèn)127.0.0.1:8000/static/img/mio.jpg卻能成功。就是這樣。
在上一步前提下使用html導(dǎo)入靜態(tài)資源
以css文件為例,在上一步做到后,href屬性寫為href="static/css/test.css"即可。不過(guò)django推薦的方案是使用模板導(dǎo)入。對(duì)于模板我的理解并不太少所以只貼方案。
現(xiàn)在文件前方使用{%load static %},之后在使用中(以同樣的css文件為例)如此寫:href="{%static '/css/main.css'%}"。這樣也可以成功訪問(wèn)。如下是官方文檔給出的關(guān)于圖片的例子:
{% load static %} <img src="{% static "my_app/example.jpg" %}" alt="My image">
其他靜態(tài)資源也是如此。
至此,Django導(dǎo)入靜態(tài)文件的問(wèn)題得以解決。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)django運(yùn)用css的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
分享文章:django運(yùn)用css的方法-創(chuàng)新互聯(lián)
標(biāo)題URL:http://jinyejixie.com/article4/hieie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站、面包屑導(dǎo)航、ChatGPT、網(wǎng)站設(shè)計(jì)公司、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容