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

Django项目views.py无法读取同目录文件报FileNotFoundError问题

问题原因

这不是Django的访问限制,本质是Python相对路径的解析规则导致的:

  • 用open("test.txt", "rb")这类纯文件名的相对路径时,Python不会以当前代码文件所在目录为基准找文件,而是以程序启动时的**当前工作目录(CWD)**为查找起点。
  • 直接运行同目录下的read_file.py时,你的启动目录就是脚本所在的目录,查找时刚好能匹配到同目录的test.txt,所以能正常运行。
  • 启动Django服务时,一般是在项目根目录执行python manage.py runserver命令,此时工作目录是项目根目录,不是views.py所在的子目录,自然找不到和views.py同目录的test.txt,触发FileNotFoundError。
修复方法

不要依赖启动时的工作目录写相对路径,基于当前代码文件的固定位置拼接绝对路径即可,两种常用写法:

基于os模块实现(兼容所有Python版本)

import os

# 获取当前views.py所在的绝对目录路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接得到test.txt的完整路径
file_path = os.path.join(current_dir, "test.txt")

fkey = open(file_path, "rb")
key = fkey.read()

基于pathlib实现(Python3.4+支持,写法更简洁)

from pathlib import Path

# 直接定位到当前文件同目录下的test.txt
file_path = Path(__file__).resolve().parent / "test.txt"

fkey = open(file_path, "rb")
key = fkey.read()

提示:不要通过修改Django启动目录的方式临时绕开问题,基于__file__变量拼接路径的方案兼容性最强,不管从哪个目录启动服务、部署到什么环境都能正常定位文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:16:17