You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django生产环境部署:相对路径读取JSON文件报错求助

解决Django生产环境读取JSON文件的路径问题

问题根源在于:使用python3 manage.py runserver时,终端工作目录是项目根目录,相对路径能正常解析;但WSGI服务器(如Gunicorn、Apache)的工作目录通常不是项目根,导致相对路径指向错误位置,找不到文件。

以下是两种可靠的修复方案:

方案一:基于项目根目录的绝对路径

利用Django配置中自带的BASE_DIR(已在settings.py中定义为项目根目录的绝对路径),拼接出文件的完整路径:

# 在models.py中导入必要模块
from django.conf import settings
import os

# 拼接文件绝对路径
file_path = os.path.join(settings.BASE_DIR, 'orchestration/static/router_models.json')

# 安全读取文件(推荐用with语句自动关闭文件)
with open(file_path, 'r') as f:
    data = f.read()

可以额外增加文件存在性检查,避免报错:

file_path = os.path.join(settings.BASE_DIR, 'orchestration/static/router_models.json')
if os.path.exists(file_path):
    with open(file_path, 'r') as f:
        data = f.read()
else:
    raise FileNotFoundError(f"未找到目标JSON文件:{file_path}")

方案二:使用Django静态文件查找器

如果该JSON文件属于静态资源范畴,推荐用Django的staticfiles查找器来定位,更符合Django的静态资源管理规范:

from django.contrib.staticfiles import finders

# 查找静态文件路径(无需写完整的app/static前缀,finders会自动检索)
file_path = finders.find('router_models.json')

if file_path:
    with open(file_path, 'r') as f:
        data = f.read()
else:
    raise FileNotFoundError("静态文件router_models.json未找到,请检查STATICFILES配置")

注意:确保orchestration应用已添加到INSTALLED_APPS,且STATICFILES_DIRS配置正确,这样查找器才能定位到文件。

内容的提问来源于stack exchange,提问作者Jonathan E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:35:22