Django:如何告诉 Django 应该在哪里寻找应用程序?

标签 django python-module django-settings pythonpath django-apps

阅读《Two Scoops of Django 1.11》后,我改变了项目的结构,如下所示:

myname_project
  ├── config/
  │   ├── settings/
  │   │   ├── base.py
  │   │   ├── local.py
  │   │   ├── staging.py
  │   │   ├── prod.py
  │   ├── __init__.py
  │   ├── urls.py
  │   └── wsgi.py
  ├── docs/
  ├── myname/
  │   ├── accounts/  # App
  │   ├── blog/ # App
  │   ├── core/ # App
  │   ├── media/ # Development only!
  │   ├── static/
  │   └── templates/
  ├── .gitignore
  ├── Makefile
  ├── README.md
  ├── manage.py
  └── requirements/

我现在的问题是,Django 找不到该应用程序了。以下是我的设置文件外观的要点:

import os
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'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ...
    'accounts',
    'blog',
    'core',
]

...

ROOT_URLCONF = 'config.urls'

...

问题是现在,当我运行 python manage.py makemigrations --settings=config.settings.local 时我收到错误:ModuleNotFoundError: No module named 'accounts' .

所以 Django 似乎无法再找到我的应用程序了。我如何告诉 Django 应该在根目录中查找应用程序?

我尝试使用PROJECT_ROOT = BASE_DIR.parent / 'myname'但这没有帮助。而且我找不到如何设置(伪代码:)APP_DIR在 Django 文档中。

最佳答案

sys.path.append(os.path.join(BASE_DIR, "myname")) 行添加到您的 settings.py 中:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.append(os.path.join(BASE_DIR, "myname"))

或者使用路径库:

BASE_DIR = Path(__file__).resolve().parent.parent
sys.path.append(str(BASE_DIR / 'myname'))

关于Django:如何告诉 Django 应该在哪里寻找应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50364758/

相关文章:

python - 是否可以在不使用 django 的身份验证和登录方法的情况下编写登录功能的代码?

python c api无法将任何模块导入新创建的模块

python - 如何解决这个 Python 导入循环引用

python - python子模块如何在它们之间共享稀缺资源?

python - 无法在 Django 设置文件中获取环境变量

django - 如何设置 STATIC_ROOT 和 MEDIA_ROOT 以便使用的路径不是硬编码的?

python - 从外部源更改 Django 的设置

python - 具有 postgresql 错误值的 Django 应用程序对于类型字符变化来说太长(1)

python - 如何用盐检查_password()?

javascript - 在外部 JavaScript 中使用 django 模板标签