Django 1.9从项目根目录读取文件触发FileNotFoundError求助
排查Django 1.9中文件找不到的问题
我来帮你一步步排查这个FileNotFoundError的问题,咱们从核心点入手:
1. 先搞清楚BASE_DIR到底指向哪里
你配置的BASE_DIR计算逻辑是对的,但实际指向的路径可能和你想的不一样。先在你的post视图里加几行打印代码,确认真实路径:
import os from django.conf import settings def your_post_method(request): # 先打印BASE_DIR的实际值 print("当前BASE_DIR:", settings.BASE_DIR) # 打印拼接后的完整文件路径 target_path = os.path.join(settings.BASE_DIR, "file1.txt") print("尝试访问的文件路径:", target_path) # 尝试打开文件并捕获详细错误 try: with open(target_path, 'r', encoding='utf-8') as file_: content = file_.read() except FileNotFoundError as e: print("错误详情:", str(e))
触发post请求后看控制台输出,就能明确路径是否真的指向你放文件的C:\根目录。
2. 核对项目实际目录结构
你说C:\下直接放了settings.py和file1.txt,但正常Django项目的结构应该是两层嵌套:
C:\你的项目名\ 你的项目名\ settings.py urls.py wsgi.py __init__.py file1.txt
如果是这种标准结构,那BASE_DIR其实指向的是外层的C:\你的项目名\,而非C:\根目录。这时候如果你的file1.txt真的放在C:\下,就得把路径改成:
os.path.join(os.path.dirname(settings.BASE_DIR), "file1.txt")
3. 检查文件本身的问题
- 确认文件名拼写完全一致,比如别把
file1.txt写成了File1.txt(Windows虽然不区分大小写,但代码里写错还是会触发错误); - 检查文件权限:C:\根目录的文件可能需要管理员权限才能读取,你可以先把
file1.txt移到项目根目录下(比如和外层你的项目名文件夹同级),再用原来的路径尝试,权限问题大概率会解决。
4. 用绝对路径直接测试
如果还是不确定,直接用硬编码的绝对路径测试:
with open(r"C:\file1.txt", 'r', encoding='utf-8') as file_: content = file_.read()
如果这样能打开,说明是BASE_DIR的拼接逻辑和你预期不符;如果还是报错,那要么文件不在这个位置,要么就是系统权限限制了读取。
内容的提问来源于stack exchange,提问作者Yunter
相关产品推荐
相关产品推荐

