【问题标题】:how to import the custormed settings.py variable in django project?如何在 django 项目中导入自定义的 settings.py 变量?
【发布时间】:2013-06-12 23:36:38
【问题描述】:

我在我的 django 项目中使用客户设置,就像在我的 manage.py 中一样。我写:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "setting.windows")
...

当我运行我的代码时,我想以不同的设置运行我的程序:

python manage.py runserver --settings=twoscoops.settings.local

在我的 settings.py 中,我还添加了一些我的私有程序变量,不同的 settings.py 使用不同的变量。如果我的 models.py 或其他类文件想要导入我的设置文件中定义的那些变量。 import Statement怎么写?

我的意思是如果我这样做了

import twoscops.settings.local

当我使用其他设置时,我可能会更改环境变量。 怎么做?

【问题讨论】:

    标签: python django django-settings


    【解决方案1】:

    实现这一点的一个好方法实际上是在您的操作系统中设置一个环境变量,然后在您的 Python 代码中从 environment 模块中检查它(如下所示)。

    注意:就目录结构而言,使用适合您的任何东西 - 我使用 <my app>/conf/envs/<some env>.py 进行环境特定设置

    # twoscoops/conf/envs/current.py
    """
    Imports the proper settings, based on the deployment environment's name (set
    as an environment variable), defaulting to local settings.
    """
    import os
    
    from django.core.exceptions import ImproperlyConfigured
    
    
    # Environments (these can be called anything you want)
    ENV_LOCAL = 'local'
    ENV_PROD = 'prod'
    DEPLOYMENT_ENVS = (ENV_LOCAL, ENV_PROD)
    
    # Get the deployment environment's name from the os environment
    DEPLOYMENT_ENV = os.getenv('DJANGO_DEPLOYMENT_ENV', ENV_LOCAL)
    
    # Ensure the deployment env's name is valid
    if DEPLOYMENT_ENV not in DEPLOYMENT_ENVS:
        raise ImproperlyConfigured(
            u'Invalid `DJANGO_DEPLOYMENT_ENV`: {d}'.format(d=DEPLOYMENT_ENV)
        )
    
    # Import env-specific settings
    
    if DEPLOYMENT_ENV == ENV_LOCAL:
        # Local, native testing
        from twoscoops.conf.envs.local import *
    
    if DEPLOYMENT_ENV == ENV_PROD:
        # Production
        from twoscoops.conf.envs.prod import *
    

    只需将from twosscoops.conf.envs.current import * 添加到您的每个主要设置模块(您可能只有一个,或者您可能有一个用于 API、一个用于网站等)。

    您会注意到上面的示例默认为twoscoops.conf.envs.local。当您想使用另一个环境(在我的示例中,只有 prod 和本地环境)时,只需在启动 shell 或服务器之前添加 DJANGO_DEPLOYMENT_ENV 环境变量(或在启动 uWSGI 之前在 Upstart 脚本中等),像这样:

    you@your-server$ export DJANGO_DEPLOYMENT_ENV=prod
    you@your-server$ python manage.py shell
    

    在 Windows 中,您也可以设置环境变量(我相信命令行和 GUI - Google 会知道更多)。

    【讨论】:

      【解决方案2】:

      您也可以为您的本地开发做一些小技巧,只需将export DJANGO_VARIABLE=value-of-variable 放在虚拟环境的activate 脚本的末尾即可。

      请注意,对于生产,您需要在您的 Apache vhost 配置中添加类似的内容(我确信对于 nginx 类似):

      SetEnv DJANGO_VARIABLE value-of-variable

      注意 vhost 配置中的变量名和值之间没有等号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 2016-08-20
        • 2016-10-27
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多