您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Django debug為True時,css加載失敗怎么辦的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
django上線后,需要把setting.py文件的debug=True改為False,以防暴露代碼報錯問題。
因為我項目用到css的地方只有admin管理員登陸這塊,沒有自定義的css等,所以我的css文件夾名稱定義成static
STATIC_URL=‘/static/‘ STATIC_ROOT=os.path.join(BASE_DIR,'../static/')
STATIC_URL是css的加載路徑,項目中如果用到了css的地方,會沿著該路徑尋找這個路徑下的css文件
STATIC_ROOT是存放所有的static文件,運行 python manage.py collectionstatic命令后,python會自動檢索項目所有的目錄,把static文件夾拷貝到STATIC_ROOT目錄下。在部署的時候會用到。
將所有的所有app下(包括Django自帶的)static目錄下的文件復(fù)制到STATIC_ROOT目錄下
python manage.py collectionstatic
添加下述代碼到nginx配置文件中
location /static { alias /Users/admin/PythonProject/static; break; }
server結(jié)果如下
server{ listen 8011; server_name localhost; rewrite ^/$/ break; location /static { alias /Users/admin/PythonProject/static; break; } location /{ proxy_pass http://127.0.0.1:8000; } }
作用如下:當(dāng)一個請求(例如,登陸請求 http://127.0.0.1:8011/admin/)通過nginx轉(zhuǎn)發(fā)時,會首先到下面的location中,被轉(zhuǎn)發(fā)到8000端口,調(diào)用Django項目中的admin登陸接口,登陸接口里面會請求兩個css文件,分別是
http://127.0.0.1:8011/static/admin/css/login.css
http://127.0.0.1:8011/static/admin/css/base.css
這兩個請求被上面的nginx配置中的第一個location匹配到,并且使用alias路徑替換location路徑,找到login.css文件和base.css文件。
(注意:location后面配置的路徑,如果是以 / 結(jié)尾,那么匹配后的路徑將不會帶匹配中的字段,不帶 / 結(jié)尾,將會帶著匹配中的字段,詳細的就不再贅述了)
這樣,css文件就會被正確的加載上了。
補充:Django項目關(guān)閉debug模式后,靜態(tài)文件無法加載的解決辦法
近期在做OpenStack Horizon項目的相關(guān)開發(fā),OpenStack的整體環(huán)境使用DevStack安裝,horizon開發(fā)過程中直接使用命令:
python manager.py runserver
開啟內(nèi)置服務(wù)器,由于項目中l(wèi)ocal_settings.py文件中的DEBUG=True,進行開發(fā)和調(diào)試一直沒什么問題。
但是現(xiàn)在需要編寫404,500等出錯頁面,在debug模式下出了錯都會出現(xiàn)報錯頁面,無法轉(zhuǎn)向到404或500頁面,這時我將local_settings.py中的DEBUG設(shè)為false,這時候應(yīng)該可以轉(zhuǎn)向到404頁面。
實驗證明確實如此,404和500頁面都可以得到,但是出現(xiàn)了新的問題:css和js文件無法加載。
Django框架僅在開發(fā)模式下提供靜態(tài)文件服務(wù)。
當(dāng)我開啟DEBUG模式時,Django內(nèi)置的服務(wù)器是提供靜態(tài)文件的服務(wù)的,所以css等文件訪問都沒有問題,但是關(guān)閉DEBUG模式后,Django便不提供靜態(tài)文件服務(wù)了。
想一想這是符合Django的哲學(xué)的:這部分事情標(biāo)準(zhǔn)服務(wù)器都很擅長,就讓服務(wù)器去做吧!
OK,解決問題的辦法也就出現(xiàn)了,我最開始想到的就是,使用項目正式部署是所使用的配置,由apache提供靜態(tài)文件服務(wù)。不過解決問題的方法遠不止一種,在stackoverflow上我發(fā)現(xiàn)了更有趣的方法。
編輯/etc/apache2/sites-available/horizon文件:
#Alias /media /opt/stack/horizon/openstack_dashboard/static Alias /static /opt/stack/horizon/openstack_dashboard/static
建立靜態(tài)文件鏈接:
ln -sv /opt/stack/horizon/openstack_dashboard/static /opt/stack/horizon
重啟apache:
sudo service apache2 restart
在URLconf中添加:
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/path/to/media'}),
官方文檔中評價這種辦法:“The big, fat disclaimer”。
使用正確的URL鏈接404頁面模板;
python manage.py runserver --insecure
感謝各位的閱讀!關(guān)于“Django debug為True時,css加載失敗怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。