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

Django技术问题:修改项目结构后如何指定应用查找目录?

解决Django找不到myname目录下应用的问题

你的核心问题在于Python模块搜索路径的配置——Django没法定位到myname目录下的accounts、blog等应用,因为这个目录不在默认的Python模块搜索路径里。你定义的PROJECT_ROOT只是自定义变量,Django不会自动将其纳入搜索范围,得手动做配置调整。

这里有两个实用的解决方案,你可以根据偏好选择:

方案1:将myname目录加入Python模块搜索路径

在config/settings/base.py中添加代码,把PROJECT_ROOT对应的myname目录注入到sys.path(Python模块搜索路径)里:

import os
import sys  # 新增导入sys模块
from pathlib import Path
from django.core.exceptions import ImproperlyConfigured

def get_env_variable(var_name):
    """Get the environment variable or return exception."""
    try:
        return os.environ[var_name]
    except KeyError:
        error_msg = 'Set the {} environment variable'.format(var_name)
        raise ImproperlyConfigured(error_msg)

# Build paths inside the project like this: BASE_DIR / 'media'
BASE_DIR = Path(__file__).resolve().parent.parent
PROJECT_ROOT = BASE_DIR.parent / 'myname'

# 新增这行,将myname目录加入Python搜索路径的最前端
sys.path.insert(0, str(PROJECT_ROOT))

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # ... 其他第三方应用
    'accounts',
    'blog',
    'core',
]

sys.path.insert(0, ...)会让Python优先在myname目录下查找模块,这样你在INSTALLED_APPS里写短应用名就能被正常识别了,也符合《Two Scoops of Django》的风格推荐。

方案2:在INSTALLED_APPS中使用完整应用路径

如果不想修改sys.path,可以直接给应用名加上myname前缀,用完整的模块路径声明:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    # ... 其他内置/第三方应用
    'myname.accounts',
    'myname.blog',
    'myname.core',
]

这种方式不需要调整路径,直接通过完整模块名让Django定位到应用,缺点是应用名会稍长一些。

两种方案都能解决你遇到的ModuleNotFoundError,选一个测试即可。

内容的提问来源于stack exchange,提问作者J. Hesters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:28