如何将django的设置对象变成dict?

时间:2017-12-05 16:12:41

标签: python django python-3.x django-settings

我有什么:

from django.conf import settings

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

我喜欢什么(使用Django 1.11):

from django.conf import settings

instance = SomeClassInstantiatedWithADict(**settings.__dict__)

我试过了:

__dict__

是接近的,但是List<String> list1 = new ArrayList<>(); List<String> list2 = Files.lines(Paths.get(fname)).flatMap(s -> { String[] line = s.split("\\t"); if (line.length > 0) { list1.add(line[0]); } return Arrays.stream(line).skip(1); }).collect(Collectors.toList()); 只获得了一小部分设置,我认为这些设置是硬编码的,而不是添加的属性。谢谢你的帮助!

5 个答案:

答案 0 :(得分:3)

使用以下代码:

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

然后,您将instance中的所有设置字典作为字典。

答案 1 :(得分:1)

您确定您确实需要所有设置吗?

为什么不使用小帮手,则传入您需要的所有设置和默认值。像这样,即使您未配置设置,也总是可以得到实际需要的设置。

    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},
    ])

答案 2 :(得分:0)

这会将整个设置对象转换为字典:

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。阅读它here

答案 3 :(得分:0)

检查shell中的settings.__dict__['_wrapped'].__dict__。似乎里面有一切。但是不确定它是否是正确的访问方式。

答案 4 :(得分:-1)

>>> 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, ...