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
相关产品推荐
相关产品推荐

