【问题标题】:Change Django's settings from an external source从外部源更改 Django 的设置
【发布时间】:2016-01-01 23:10:09
【问题描述】:

我想用 Python 编写一个脚本来编辑我的 Django 应用程序 settings.py 文件。除了将文件作为文本文件读取之外,还有其他方法可以编辑设置文件中变量的值并保存吗?

【问题讨论】:

    标签: python django django-settings


    【解决方案1】:

    在您的主要 settings.py 中,您可以执行以下操作:

    from portal.base.settings import add_portal_settings
    globals().update(add_portal_settings(locals()))
    

    portal.base.settings 的内容类似于:

    def add_portal_settings(settings):
      settings['PORTAL_URL'] = "portal_account_login"
      return settings
    

    这将起作用:

    from django.conf import settings
    print(settings.PORTAL_URL)
    

    【讨论】:

      【解决方案2】:

      除了将文件作为文本文件读取之外,还有其他方法可以编辑设置文件中的变量值并保存吗?

      没有必要像这样解析和重写settings.py。只需添加这样的语句:

      import json
      overrides = json.loads(open('settings.json').read())
      globals().update(overrides)
      

      settings.json 然后包含您的设置,如下所示:

      {
        "MY_SETTING" : "FOO"
      }
      

      我在这里使用 .json 文件作为示例。只要overrides 是字典,您就可以使用任何返回字典的源(例如yml、您自己的格式,甚至是python 的类__dict__)。

      因此,从django.conf 导入的settings 将包含新设置,就好像它直接在settings.py 中指定一样:

      $ python manage.py shell
      In [1]: print settings.MY_SETTING
      FOO 
      

      【讨论】:

      • 感谢您回复@miraculixx。我的问题不是很清楚。我有 4 个 django 应用程序,所有四个应用程序的设置文件都非常相似,但数据库名称、密码、主机等不同。我不想直接在每个 settings.py 文件中进行编辑。相反,我创建了一个包含所有设置变量的 json 文件,当我需要更改应用程序的 settings.py 文件时,我想运行 python 脚本并读取 json 文件中的值以及 json 文件中是否有任何更改valuesthen 我想更改设置文件中的值
      • 上述解决方案将完成所有这些,但是,您不需要更改 settings.py。它在 django 加载时自动执行。请注意,这种事情的一般做法是将数据库名称、密码、主机存储在环境变量中并使用os.environ.get('YOUR_VARIABLE')
      • 我希望在编写自己的解决方案之前知道这一点!问题:这是否会监视外部文件,即如果外部文件更改,则重新启动服务器?
      • 你将不得不尝试,但AFAIK Django的开发服务器(运行服务器)只监控python文件
      【解决方案3】:

      你想要像django-appconf 这样的东西。

      【讨论】:

        猜你喜欢
        • 2013-03-13
        • 2015-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 2018-09-19
        相关资源
        最近更新 更多