Post

【Django】设置文件

官方文档:

1.指定设置文件

Django创建项目时自动创建了一个设置文件<project_name>/settings.py。

执行django-admin或manage.py的任何命令时都要使用DJANGO_SETTINGS_MODULE环境变量或--settings选项指定使用的设置文件。例如:

Linux Shell:

1
2
export DJANGO_SETTINGS_MODULE=mysite.settings
python manage.py runserver

Windows CMD:

1
2
SET DJANGO_SETTINGS_MODULE=mysite.settings
python manage.py runserver

使用--settings选项:

1
python manage.py runserver --settings=mysite.settings

其中的名称应当是一个可导入的Python模块名称(mysite.settings即默认创建的设置文件mysite/settings.py)。

自动生成的manage.py已经设置了DJANGO_SETTINGS_MODULE环境变量的默认值:

1
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

因此如果使用自动生成的设置文件则可以省略这一步。

2.在代码中使用设置

导入django.conf.settings对象,例如:

1
2
3
4
from django.conf import settings

if settings.DEBUG:
    # Do something

注意:不是导入自定义的设置模块mysite.settings

3.多个设置文件

如果需要在开发环境、测试环境、生产环境等场景下使用不同的设置文件,则可以创建多个设置文件并通过上述方式指定要使用的设置文件。设置文件的位置和文件名没有要求,只要是可导入的Python模块即可。

例如,在mysite/settings目录下有三个设置文件,common.py包含公共设置,dev.py包含开发环境设置,prod.py包含生产环境设置(注意修改BASE_DIR):

1
2
3
4
5
6
7
8
9
10
11
mysite/
    manage.py
    mysite/
        __init__.py
        settings/
            common.py
            dev.py
            prod.py
        urls.py
        asgi.py
        wsgi.py

在dev.py和prod.py中可以导入common.py中的设置,也可以覆盖其中的设置。例如:

common.py

1
2
ALLOWED_HOSTS = ['localhost']
DEBUG = False

dev.py

1
2
3
from .common import *  # noqa

DEBUG = True

prod.py

1
2
3
from .common import *  # noqa

ALLOWED_HOSTS = ['www.example.com']

要使用dev.py和prod.py两个设置文件,将DJANGO_SETTINGS_MODULE环境变量或--settings选项的值分别设置为mysite.settings.devmysite.settings.prod即可。

This post is licensed under CC BY 4.0 by the author.