Django 4.1.3静态文件script.js返回404错误求助
解决Django DEBUG=False时静态文件404问题
核心原因
当DEBUG = False时,Django默认不会自动托管静态文件,必须手动配置静态文件的服务逻辑。你目前注释了根urls里的静态文件路由,同时可能未正确收集静态文件到指定目录,导致文件无法被访问。
分步解决方案
1. 修正settings.py中的静态文件配置
打开项目根目录的settings.py,确保以下配置正确:
import os # 静态文件访问的URL前缀 STATIC_URL = '/static/' # 运行collectstatic命令后,静态文件的统一存放目录 STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # 告诉Django需要扫描的app静态文件目录 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'MyApp/static'), ]
2. 收集静态文件到统一目录
在终端执行以下命令,将所有app内的静态文件集中复制到STATIC_ROOT指定的文件夹:
python manage.py collectstatic
执行时会弹出确认提示,输入yes完成收集。
3. 启用根urls.py的静态文件路由
取消根urls.py中静态文件路由的注释,并补充必要的导入:
from django.conf import settings from django.conf.urls.static import serve from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('MyApp.urls')), ] # 为DEBUG=False场景添加静态文件服务路由 if not settings.DEBUG: urlpatterns += [ path('static/<path:path>', serve, {'document_root': settings.STATIC_ROOT}), ]
注意:生产环境更推荐用Nginx、Apache等Web服务器直接托管静态文件,上述方式仅适用于测试或小型部署场景。
4. 确认模板中静态文件的引用方式
打开MyApp/templates/index.html,必须使用Django模板标签引用静态文件:
{% load static %} <script src="{% static 'script.js' %}"></script>
禁止直接写硬编码路径/static/script.js,确保通过模板标签生成正确的访问URL。
5. 重启Django服务
修改配置后,重启你的Django应用,确保新配置生效。
内容的提问来源于stack exchange,提问作者KS20000
相关产品推荐
相关产品推荐

