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

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

相关推荐
隐形喷火龙12 分钟前
Springboot集成OnlyOffice
java·spring boot·后端
晨非辰14 分钟前
【数据结构】排序详解:从快速排序分区逻辑,到携手冒泡排序的算法效率深度评测
运维·数据结构·c++·人工智能·后端·深度学习·排序算法
5pace15 分钟前
【SSM|第一篇】MyBatisPlus
java·spring boot·后端·mybatis
CodeCraft Studio23 分钟前
国产化Excel开发组件Spire.XLS教程:Python将列表导出为CSV文件(含一维/二维/字典列表)
开发语言·python·excel·csv·spire.xls·列表导出为csv
Blossom.11827 分钟前
大模型知识蒸馏实战:从Qwen-72B到Qwen-7B的压缩艺术
大数据·人工智能·python·深度学习·算法·机器学习·pygame
JosieBook30 分钟前
【SpringBoot】37 核心功能 - 高级特性- Spring Boot 中的 自定义 Starter 完整教程
java·spring boot·后端
刘逸潇200544 分钟前
Socket:TCP/UDP通信详解
python·websocket·udp·tcp
百***06941 小时前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
IT_陈寒1 小时前
Python 3.12新特性实战:5个让你的代码效率翻倍的隐藏技巧!
前端·人工智能·后端
The_Second_Coming1 小时前
Python 学习笔记:基础篇
运维·笔记·python·学习