Django 用相对路径方式引用自定义模块 或 文件

Django的文件夹结构 projectName/websiteName/appName

manage.py 所在路径为:D:/projectA/website1/manage.py

views.py 所在路径为:D:/projectA/website1/app1/views.py

D:/projectA/website1/app1/module1.py

如果要引用自定义模块,引用自定义的模块

from .A import AAA (在 if name == "main" 中会报错)

from A import AAA (在网页执行中会报错)

from websiteName.appName.moduleA import some_function

要在view.py中使用相对路径读取文件 D:/projectA/website1/app1/abc.txt

如果使用 with open("abc.txt", 'r') as f 会报错 FileNotFoundError: Errno 2 No such file or directory

因为相对路径是相对于当前工作目录而言,而不是相对于views.py所在的目录 。

解决方案

要实现相对于views.py文件的相对路径来读取abc.txt,推荐使用Django提供的BASE_DIR设置来构建路径 。

复制代码
from django.conf import settings



def get_config():
    base_dir = settings.BASE_DIR
    config_file_path = os.path.join(base_dir, 'app1', 'myconfig.txt')
    
    with open(config_file_path, 'r') as config_file:
        config_data = config_file.read()
    
    return config_data

当在 if __name__ == "__main__": 块内使用相对导入时,容易犯的错误之一是与模块结构相关的错误。下面是一个示例,演示了在这种情况下可能发生的问题:

css 复制代码
mypackage/
    __init__.py
    main.py
    subpackage/
        __init__.py
        moduleA.py
        moduleB.py

这种情况下,建议使用绝对路径导入

相关推荐
码事漫谈3 分钟前
国庆七天,AI圈没一天消停
后端
掘金酱24 分钟前
[稀土掘金 × 火山引擎] AI用量周榜冲刺赛|获奖名单公示
前端·人工智能·后端
montEvergreen32 分钟前
RTMP 里的那根“连接线”:读一份 NetConnection 源码
后端·go
montEvergreen33 分钟前
RTMP 握手:一场客户端与服务端的“暗号”对决
后端·go
估值探索者36 分钟前
【Python量化系统工程实战 #08】从脚本到生产:量化系统上线 checklist 的最小闭环
java·开发语言·jvm·python·数据挖掘·数据·股票数据api接口
qianmoq37 分钟前
GrantForge 开源:基于 Spring Boot 构建统一权限平台,让权限管理不再从零开始
后端
李可以量化38 分钟前
如何开通基于 AI 打造的 A 股量化策略(下):特征工程与大模型决策落地
python
泡泡oO44 分钟前
“如果你还在用Superpowers,那我不要和你说话”
前端·后端·全栈
YatHinLay1 小时前
FastThreadLocal
后端
newerp1 小时前
sync.Mutex 源码深度拆解:正常模式(自旋)与饥饿模式
后端·程序员·go