簡體   English   中英

如何將django的設置對象變成dict?

[英]How do I turn django's settings object into a dict?

是)我有的:

from django.conf import settings

def settings_to_dict(settings)
    cfg = {
        'BOTO3_ACCESS_KEY': settings.BOTO3_ACCESS_KEY,
        'BOTO3_SECRET_KEY': settings.BOTO3_SECRET_KEY,
        # repeat ad nauseum
    }
    return cfg

instance = SomeClassInstantiatedWithADict(**settings_to_dict(settings))

我想要什么(使用Django 1.11):

from django.conf import settings

instance = SomeClassInstantiatedWithADict(**settings.to_dict())

我試過了:

from django.conf import settings

instance = SomeClassInstantiatedWithADict(**settings.__dict__)

雖然很接近,但是__dict__只獲得了一小部分設置,我認為它們是硬編碼的,而不是添加屬性。 謝謝你的幫助!

使用以下代碼:

from django.conf import settings
instance = settings.__dict__['_wrapped'].__dict__

然后你將整個設置dict作為字典instance

你確定你真的需要所有設置嗎?

為什么不使用一個小幫手,你傳遞你需要的所有設置和一個默認值。 像這樣你總是得到一個你真正需要的設置的字典,即使它們沒有配置。

    def build_settings_dict(attrs=[{'name': 'DEBUG', 'default': False},]):
        settings_dict = {}
        for attr in attrs:
            logger.info(attr)
            try:
                s = getattr(settings, attr['name'], attr['default'])
            except Exception as e:
                logger.warning("Error: %s", e)
            else:
                settings_dict[attr['name']] = s
        return settings_dict


    default_settings = build_settings_dict([
       {'name': 'DEBUG', 'default': True},
       {'name': 'USE_I18N', 'default': True},
       {'name': 'USE_L10N', 'default': False},
    ])

這會將整個設置對象轉換為字典:

In [12]: settings_dict = {}

In [13]: for st in dir(settings):
    ...:     if st.startswith('_'):
    ...:         continue
    ...:     settings_dict[st] = getattr(settings, st)
    ...:
    ...:

In [14]: settings_dict

這非常詳盡,它包含所有可能的設置屬性。

dir()是一個內置的Python。 在這里閱讀它

在你的shell中檢查settings.__dict__['_wrapped'].__dict__ 似乎里面有一切。 但是不確定這是否是訪問它的正確方法。

>>> from django.conf import settings
>>> settings_dict = vars(settings._wrapped)
>>> print(settings_dict)
{'ABSOLUTE_URL_OVERRIDES': {}, 'ADMINS': [], 'ALLOWED_HOSTS': ['127.0.0.1', 'localhost', 'www.tetricoins.com', 'api.tetricoins.com'], 'APPEND_SLASH': True, ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM