如何运行django-admin check命令?

4

我刚安装了Django并尝试第一次运行它。

目前为止,我所做的只是执行了pip3 install Djangodjango-admin startproject命令。

在安装完后,我运行了manage.py checkdjango-admin check命令。其中,manage.py check没有显示任何问题,但django-admin check命令的输出结果如下:

django.core.exceptions.ImproperlyConfigured: Requested setting ROOT_URLCONF, but settings are not configured.
You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before
accessing settings.

我知道我需要编辑DJANGO_SETTINGS_MODULE环境变量,但是:

  1. 它的值应该是什么,它应该在何时/如何设置?
  2. 我可能做错了什么导致出现这个错误?

更新

运行django-admin check --settings=djangotest.settings解决了django.core.exceptions.ImproperlyConfigured错误。

现在我有一个新的ModuleNotFoundError: No module named 'djangotest'错误。确实,djangotest是我的项目名称。我检查并找到了我的设置文件。它如下所示:

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '########################################' # not the real secret key

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

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

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'django_project.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'django_project.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'

为什么django-admin找不到这个文件,该怎么解决?

1
你是从哪里运行这个命令的?它需要在Python能够定位到 djangotest 模块的地方运行。 - markwalker_
2个回答

4

django-admin是管理任何Django项目的系统工具。默认情况下,它不知道要管理哪个项目。

如果运行django-admin check,你会得到以下结果:

django.core.exceptions.ImproperlyConfigured: Requested setting ROOT_URLCONF, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings。

这是因为django-admin不知道要使用哪个项目的设置文件。

如果运行django-admin check --settings=djangotest.settings,你会得到以下结果:

ModuleNotFoundError: No module named 'djangotest'

这是因为现在Django知道要使用哪个项目了,但Python在sys.path中找不到名为djangotest的模块。

你需要将项目目录或当前目录添加到PYTHONPATH环境变量中:

PYTHONPATH="$(pwd)"
django-admin check --settings=djangotest.settings

或者将其作为参数指定:

django-admin check --settings=djangotest.settings --pythonpath=.

4
当Django运行命令时,它需要知道你的设置在哪里。当使用manage.py命令时,每个项目都将其设置路径设置为manage.py文件,以便Django知道从哪里查找。 django-admin是Django的系统级别管理任务工具,不特定于任何给定项目。因此,在使用它运行命令时,通常需要设置DJANGO_SETTINGS_MODULE或将settings选项传递给django-admin
因此,并不是你的设置有问题,而是django-admin不知道项目的存在,因为它的范围是系统级别的。因此,为了运行check,你需要指向正确的项目方向。
默认情况下,startproject将在一个名为你选择的项目名称的模块中创建一个settings.py文件。
因此,基于此,你可以设置一个名为DJANGO_SETTINGS_MODULE的环境变量,其值为mysite.settings,例如,其中你的项目看起来像;
- project
-- manage.py
-- mysite
--- __init__.py
--- settings.py
--- urls.py
--- wsgi.py

或者您可以将设置路径传递给命令,例如:

django-admin check --settings=mysite.settings
python manage.py check --settings=mysite.settings

确实,manage.py 包含了所有必要的内容,manage.py check 命令也能正常工作。但我想知道为什么执行 django-admin check 命令会报错! - AniMir
@AniMir 抱歉,我错过了重点。不过细节基本相同。我会更新我的答案。 - markwalker_
谢谢。这很有帮助。我不再有那个错误了,但出现了另一个错误:“ModuleNotFoundError: No module named 'djangotest'”。实际上,“djangotest”是我的项目名称。我会更新我的帖子! - AniMir
@AniMir,请看我的回答,针对你的第二个问题。 - mx0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接