快速列出Django项目的所有设置

时间:2014-08-23 06:59:15

标签: python django

对于python专家来说,这可能不是一个难题,所以请帮忙。我想快速列出我的django项目的所有设置。我希望有一个简单的python脚本(在一个单独的文件中)。我是这样开始的:

from django.conf import settings

settings.configure()
settings_list = dir(settings)

for i in settings_list:
    settings_name = i
    print settings_name

通过这种方式,我获得了所有设置的名称。但是在每个settings_name之后我想要打印它的值。试过很多方法。看起来这些设置实际上是空的。例如:

print settings.INSTALLED_APPS

返回空列表。我从django根目录和项目的虚拟环境中执行脚本。

请建议正确的方法打印出我的Django项目的所有设置。

4 个答案:

答案 0 :(得分:1)

有两个问题需要回答:1)设置为空2)如何迭代设置对象中的属性和值。

关于空设置 - 引用django documenation

from django.conf import settings
settings.configure()
print settings.SECRET_KEY

应该可行,但由于某些原因,它不适用于我的情况。所以下面的代码对我有用:

from django.conf import settings
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_django_project.settings'
print settings.SECRET_KEY

然后,为了从设置对象中收集属性和值,我使用了以下代码,我实际借用了django-print-settings

a_dict = {}

for attr in dir(settings):
    value = getattr(settings, attr)
    a_dict[attr] = value

for key, value in a_dict.items():
            print('%s = %r' % (key, value))

总结一下,我的 print_settings.py 文件中的完整代码现在看起来是:

from django.conf import settings
import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'my_django_project.settings'

a_dict = {}

for attr in dir(settings):
    value = getattr(settings, attr)
    a_dict[attr] = value

for key, value in a_dict.items():
            print('%s = %r' % (key, value))

答案 1 :(得分:0)

这不是我期待的答案,但我找到了另一个很好的解决方案,如何打印Django项目的所有设置。

这可以通过安装python包 django-print-settings 来完成:

pip install django-print-settings

我从这里https://readthedocs.org/projects/django-print-settings/找到了它。请参阅该网站以了解设置和使用情况。

答案 2 :(得分:0)

import django, os
from django.conf import settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' # Settings will pick this up on lazy init.
for attr in dir(settings):
  print "%-40s: %s" % (attr, getattr(settings, attr))

答案 3 :(得分:0)

您可以调用Django的内置diffsettings

from django.core.management.commands import diffsettings

output = diffsettings.Command().handle(default=None, output="hash", all=False)

desensitized = []
for line in output.splitlines():
    if "SECRET" in line or "KEY" in line:
        continue
    desensitized.append(line)
print("\n".join(desensitized))