一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Django debug為True時,css加載失敗的解決方案

Django debug為True時,css加載失敗的解決方案

2021-10-19 09:138316AND8317 Python

這篇文章主要介紹了Django debug為True時,css加載失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

django上線后,需要把setting.py文件的debug=True改為False,以防暴露代碼報錯問題。

因為我項目用到css的地方只有admin管理員登陸這塊,沒有自定義的css等,所以我的css文件夾名稱定義成static

1.更改setting.py文件

?
1
2
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目錄下。在部署的時候會用到。

2.執(zhí)行下述命令

將所有的所有app下(包括Django自帶的)static目錄下的文件復(fù)制到STATIC_ROOT目錄下

?
1
python manage.py collectionstatic

3.修改nginx配置文件

添加下述代碼到nginx配置文件中

?
1
2
3
4
location /static {
    alias /Users/admin/PythonProject/static;
    break;
    }

server結(jié)果如下

?
1
2
3
4
5
6
7
8
9
10
11
12
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ā)過程中直接使用命令:

?
1
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文件無法加載。

在網(wǎng)上找了找,很快就找到了問題的原因:

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)了更有趣的方法。

現(xiàn)在把自己總結(jié)的四種方法列在下面,共大家參考:

1.將靜態(tài)文件由apache提供文件服務(wù)(類似正式部署):

編輯/etc/apache2/sites-available/horizon文件:

?
1
2
#Alias /media /opt/stack/horizon/openstack_dashboard/static
Alias /static /opt/stack/horizon/openstack_dashboard/static

建立靜態(tài)文件鏈接:

?
1
ln -sv /opt/stack/horizon/openstack_dashboard/static /opt/stack/horizon

重啟apache:

?
1
sudo service apache2 restart

2.使用django.views.static.serve()方法

在URLconf中添加:

?
1
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/path/to/media'}),

官方文檔中評價這種辦法:“The big, fat disclaimer”。

3.偽造404頁面:

使用正確的URL鏈接404頁面模板;

4.改變項目運行方式:

?
1
python manage.py runserver --insecure

最后這種是stackoverflow上最受歡迎的方法,確實簡單快捷!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。如有錯誤或未考慮完全的地方,望不吝賜教。

原文鏈接:https://blog.csdn.net/u011268406/article/details/103542625

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女脱了内裤打开腿让男人图片 | 久久综合色超碰人人 | 97久久天天综合色天天综合色hd | 欧美伊人久久久久久久久影院 | 亚洲欧洲日产国码无码av | 男人j放进女人的p免费看视频 | 欧美va在线高清 | 女子监狱第二季未删减在线看 | 丰满大屁股美女一级毛片 | 搓光美女衣 | caoporen在线视频入口 | 激情艳妇之性事高h | 精品综合久久久久久88小说 | 国产免费专区 | 四虎影院在线免费观看 | 欧美日韩国产成人综合在线 | 亚洲另类激情 | 91色在线观看国产 | 国产婷婷高清在线观看免费 | 色偷偷亚洲综合网亚洲 | 国产成人精品本亚洲 | 91精品国产高清久久久久久 | 爱欲荡漾在线观看 | japanese在线观看 | 视频高h| 精品国产mmd在线观看 | 国产欧美在线播放 | 桃乃木香奈ipx在线播放 | 国产精品久久久久久网站 | 千金肉奴隶在线观看 | 久久精品国产亚洲AV热无遮挡 | 亚洲精品视频免费在线观看 | 亚洲激情网站 | 亚洲阿v天堂在线2017 | 日本xnxnxnxnxn护士 | 处女摘花 | 韩国最新理论片奇忧影院 | 啪啪导航 | 黄动漫车车好快的车车双女主 | 久久精品国产亚洲AV天美18 | 成人小视频在线观看免费 |