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

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

相关推荐
qq_297574674 小时前
【实战教程】SpringBoot 集成阿里云短信服务实现验证码发送
spring boot·后端·阿里云
rayufo5 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
韩立学长6 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
Python 老手6 小时前
Python while 循环 极简核心讲解
java·python·算法
开源技术7 小时前
如何将本地LLM模型与Ollama和Python集成
开发语言·python
weixin_437044647 小时前
Netbox批量添加设备——堆叠设备
linux·网络·python
我有医保我先冲7 小时前
AI 时代 “任务完成“ 与 “专业能力“ 的区分:理论基础、行业影响与个人发展策略
人工智能·python·机器学习
测试开发Kevin8 小时前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python
爱学习的阿磊8 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
阿狸OKay8 小时前
einops 库和 PyTorch 的 einsum 的语法
人工智能·pytorch·python