Django部署到服务器后无法获取到静态元素 The requested resource was not found on this server

文章讲述了在Django项目部署到云主机后,由于静态图片未正确配置,导致在DEBUG为False时无法访问的问题。通过设置STATIC_URL和STATIC_ROOT,以及使用url路由,解决了这个问题并提供了相应的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

写了一个Django项目,部署到云主机后,访问发现图片无法访问,报错The requested resource was not found on this server
图片是一个词云图,根据爬虫爬取的信息生成的,根据爬取的信息会改变,所以没有把图片放在nginx中,而是直接获取Django的图片

原因分析:

直接原因是因为发布到服务器,将DEBUG设置成False
在这里插入图片描述根本原因是,DEBUG模式下,Django本身相当于一个liveServer,默认可以加载静态元素,我们可以将静态元素放入一个目录,配置一个URL 就可以获取

代码:

# settings.py
STATIC_URL = "static/"
import os
STATIC_ROOT = (
    os.path.join(BASE_DIR, 'app1/static')
)
STATICFILES_DIRS = (
    # 收集静态元素,保存到项目同级别目录static下
    os.path.join(BASE_DIR, 'static'),
)

settings.py下三个配置项:
STATIC_URL 配置的请求静态元素的URL,默认是static,比如要访问1.png,访问地址就是http://xxx.xxx.xxx.xxx/static/1.png
STATIC_ROOT配置的静态元素的存放的路径,也就是1.png存放的路径。另外,当项目部署时,使用python manage.py collectstatic将所有静态元素保存在此路径
STATICFILES_DIRS这个配置不影响访问,可以理解是一个公共路径,可以将多个app的静态元素保存在这个路径,Django会优先查找此路径,再查找app下的STATIC_ROOT

当DEBUG=False时,可以Django只是一个后端服务器,不再提供静态元素展示,所以访问静态元素时就会报错The requested resource was not found on this server

解决方案:

将静态元素也通过url路由的方式暴露出来,通过路由方式访问
也就是Django提供的内置视图
官网: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 }),
]

访问http://xxx.xxx.xxx.xxx/images/1.png ,就会访问到app1/static/1.png

### 解析 OpenStack 中 URL 未找到的问题 当遇到 `The requested URL /auth/login/ was not found on this server` 的错误消息时,通常表明 Horizon (Dashboard) 配置存在问题或者 Web 服务器未能正确处理请求。具体可能的原因包括但不限于: - **Horizon 配置文件设置不正确**:确保 `/etc/openstack-dashboard/local_settings` 文件中的配置项准确无误[^5]。 - **Apache 或 Nginx 虚拟主机配置不当**:确认 Web 服务提供商的站点配置已针对 Horizon 进行适当调整。 - **WSGI 设置问题**:检查 WSGI 应用程序接口是否被正确加载并指向到 Horizon 应用上。 为了修复上述提到的 dashboard 访问路径找不到的情况,建议执行如下操作: #### 修改本地设置文件 编辑 `/etc/openstack-dashboard/local_settings` 并验证以下选项是否存在以及其值是否合适: ```python ALLOWED_HOSTS = ['*'] # 或者指定允许访问的具体 IP 地址列表 OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST ``` #### 更新 Apache/Nginx 站点配置 对于使用 Apache 的情况,请确保存在类似于下面这样的 VirtualHost 条目,并且该条目的 DocumentRoot 和 Directory 指向了正确的目录位置: ```apacheconf <VirtualHost *:80> ServerName controller WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/wsgi/django.wsgi </VirtualHost> ``` 完成更改之后重启 HTTPD 服务使新配置生效: ```bash systemctl restart httpd.service ``` 通过以上措施可以有效解决大部分由配置引起的 Dashboard 登录页面不可达的问题。然而如果仍然无法正常工作,则需进一步排查其他潜在因素如 SELinux 状态、防火墙规则等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值