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

Django导入自定义模块报ModuleNotFoundError,求正确导入方法

解决Django视图中导入自定义模块的问题

这个问题我之前也碰到过,核心原因是Django运行服务器时的工作目录和你在Spyder里的工作目录不一致,导致你用相对路径添加sys.path的方式失效了。下面给你几个可行的解决方案:

方法1:将code文件夹转为Python包(推荐)

这是最符合Python和Django规范的做法,步骤很简单:

  • 在myapp/code文件夹下创建一个空的__init__.py文件,这样Python就会把code识别为一个可导入的包。
  • 然后在views.py里直接用绝对或相对导入:
from django.shortcuts import render
from django.views import View

# 相对导入(推荐,和当前文件同属myapp包)
from .code import examplee as expl
# 或者绝对导入(基于项目根目录)
# from myapp.code import examplee as expl

class CmtGraphTool(View):
    def get(self, request, *args, **kwargs):
        item_list = expl.test1()  # 尽量别用list当变量名,这是Python内置类型
        context = {'item_list': item_list}  # 你之前的context写法有误,需为键值对字典
        return render(request, "cmtgraphtool.html", context)

这样不管Django从哪个目录启动,都能正确找到模块,而且项目结构更清晰规范。

方法2:使用绝对路径添加sys.path

如果你暂时不想把code转为包,可以通过os模块获取views.py的绝对路径,再拼接code文件夹的路径,确保sys.path添加的是正确的目录:

from django.shortcuts import render
from django.views import View
import os
import sys

# 获取当前views.py文件的绝对目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接code文件夹的绝对路径
code_dir = os.path.join(current_dir, 'code')
sys.path.append(code_dir)

import examplee as expl

class CmtGraphTool(View):
    def get(self, request, *args, **kwargs):
        item_list = expl.test1()
        context = {'item_list': item_list}
        return render(request, "cmtgraphtool.html", context)

为什么Spyder能识别但Django不行?

Spyder默认的工作目录通常是你当前打开的文件所在的目录(也就是myapp目录),所以./code指向的是myapp/code,能找到模块;但运行python manage.py runserver时,工作目录是项目的根目录(包含manage.py的那个目录),这时候./code会指向项目根下的code文件夹,而你这个文件夹是在myapp里的,所以就会出现ModuleNotFoundError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:22:35