Django部署到服務(wù)器后無(wú)法獲取到靜態(tài)元素 The requested resource was not found on this server(問(wèn)題及解決方案)
問(wèn)題描述
寫了一個(gè)Django項(xiàng)目,部署到云主機(jī)后,訪問(wèn)發(fā)現(xiàn)圖片無(wú)法訪問(wèn),報(bào)錯(cuò)The requested resource was not found on this server
圖片是一個(gè)詞云圖,根據(jù)爬蟲爬取的信息生成的,根據(jù)爬取的信息會(huì)改變,所以沒(méi)有把圖片放在nginx中,而是直接獲取Django的圖片
原因分析:
直接原因是因?yàn)榘l(fā)布到服務(wù)器,將DEBUG設(shè)置成False

根本原因是,DEBUG模式下,Django本身相當(dāng)于一個(gè)liveServer,默認(rèn)可以加載靜態(tài)元素,我們可以將靜態(tài)元素放入一個(gè)目錄,配置一個(gè)URL 就可以獲取
代碼:
# settings.py
STATIC_URL = "static/"
import os
STATIC_ROOT = (
os.path.join(BASE_DIR, 'app1/static')
)
STATICFILES_DIRS = (
# 收集靜態(tài)元素,保存到項(xiàng)目同級(jí)別目錄static下
os.path.join(BASE_DIR, 'static'),
)settings.py下三個(gè)配置項(xiàng):
STATIC_URL 配置的請(qǐng)求靜態(tài)元素的URL,默認(rèn)是static,比如要訪問(wèn)1.png,訪問(wèn)地址就是http://xxx.xxx.xxx.xxx/static/1.png
STATIC_ROOT配置的靜態(tài)元素的存放的路徑,也就是1.png存放的路徑。另外,當(dāng)項(xiàng)目部署時(shí),使用python manage.py collectstatic將所有靜態(tài)元素保存在此路徑
STATICFILES_DIRS這個(gè)配置不影響訪問(wèn),可以理解是一個(gè)公共路徑,可以將多個(gè)app的靜態(tài)元素保存在這個(gè)路徑,Django會(huì)優(yōu)先查找此路徑,再查找app下的STATIC_ROOT
當(dāng)DEBUG=False時(shí),可以Django只是一個(gè)后端服務(wù)器,不再提供靜態(tài)元素展示,所以訪問(wèn)靜態(tài)元素時(shí)就會(huì)報(bào)錯(cuò)The requested resource was not found on this server
解決方案:
將靜態(tài)元素也通過(guò)url路由的方式暴露出來(lái),通過(guò)路由方式訪問(wèn)
也就是Django提供的內(nèi)置視圖
官網(wǎng):https://docs.djangoproject.com/zh-hans/4.1/ref/views/
# settings.py
STATIC_ROOT = (
os.path.join(BASE_DIR, 'app1/static')
)
# urls.py
from django.urls import path, include, re_path
from django.conf import settings
from django.views.static import serve
urlpatterns = [
path("admin/", admin.site.urls),
path("largescreen/", include("carlargescreen.urls")),
re_path(r'^images/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT }),
]訪問(wèn)http://xxx.xxx.xxx.xxx/images/1.png ,就會(huì)訪問(wèn)到app1/static/1.png
到此這篇關(guān)于Django部署到服務(wù)器后無(wú)法獲取到靜態(tài)元素 The requested resource was not found on this server的文章就介紹到這了,更多相關(guān)Django部署到服務(wù)器無(wú)法獲取到靜態(tài)元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python模擬登錄百度代碼分享(獲取百度貼吧等級(jí))
python模擬登錄百度,實(shí)現(xiàn)了登錄并讀取百度關(guān)注貼吧列表,百度登錄還是有點(diǎn)麻煩的,由于用的ssl,所以要先獲取token,然后再登錄,這個(gè)用finddle2分析下,還是比較好解決的2013-12-12
python實(shí)現(xiàn)文本界面網(wǎng)絡(luò)聊天室
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)文本界面網(wǎng)絡(luò)聊天室,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Python粒子煙花動(dòng)態(tài)效果實(shí)現(xiàn)
這篇文章主要介紹了Python實(shí)現(xiàn)粒子煙花動(dòng)態(tài)效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01
Python OpenCV實(shí)現(xiàn)攝像頭人臉識(shí)別功能
這篇文章主要介紹了Python OpenCV實(shí)現(xiàn)攝像頭人臉識(shí)別,使用Python 3和OpenCV進(jìn)行攝像頭人臉識(shí)別的基本步驟,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
Python優(yōu)先隊(duì)列實(shí)現(xiàn)方法示例
這篇文章主要介紹了Python優(yōu)先隊(duì)列實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python優(yōu)先隊(duì)列的具體定義與使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-09-09

