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

本文介绍了在Django项目中处理文件路径的问题,包括使用管理器和视图文件的相对路径,以及如何避免在`__main__`块中使用相对导入时的模块结构错误。重点讲解了如何利用`BASE_DIR`设置来构建正确的文件路径,以确保文件读取的成功。

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__": 块内使用相对导入时,容易犯的错误之一是与模块结构相关的错误。下面是一个示例,演示了在这种情况下可能发生的问题:

mypackage/
    __init__.py
    main.py
    subpackage/
        __init__.py
        moduleA.py
        moduleB.py

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值